我創建連接到服務器,此外其他功能,登錄服務器聊到一個文件,這樣違規可被處罰後的客戶端應用。
不幸的是,它變得有必要在應用程序中有(至少)兩個線程:接收器循環和發送器循環 - 服務器需要定時準則。這意味着,我需要線程安全的解決方案來將數據記錄到文件中。
這是會發生什麼,如果線程發送日誌中(儘可能)同時信息:多線程FILESTREAM
logfile.txt:
chat: Hello my name is Duke
chat: Hell[WARNING]: Hacker detectedo my name is John
你可以看到注入到另外一個句子。我不希望這種事情發生。我的std::cout
輸出也是如此,但這並不重要。
問題:
- 我如何
std::ofstream
只能在同一時間登錄一個數據? (記住其他並插入後,不在中間) - 如何檢查文件是否被其他線程關閉。 (或錯誤)
獎金的問題: 你能解決同樣的問題對於std::cout
?
您將要寫入文件之前鎖定一個互斥體(或'的std :: cout') – 2013-03-26 22:10:56
只是,我不希望阻止其他輸入,但要'std'做出自己的順序寫作。先拿一個輸入,然後輸入另一個輸入 – 2013-03-26 22:12:56
您可以避免使用dauphic的最後一段進行阻止。 – 2013-03-26 22:13:37