クラスでスレッド関数を保護CRITICAL_SECTION
し、多くの送受信ソケット アクションを実行し、すべて問題ありませんが、スレッドがログ ファイルに書き込みを行っていると、問題が発生します。
時間
class ClassA
{
public:
ClassA();
~ClassA();
void run();
...
private:
CRITICAL_SECTION criticalSection;
LogFiles *m_logFiles;
...
};
cpp
ClassA::ClassA()
{
m_logFiles = new LogFiles();
InitializeCriticalSection(&criticalSection);
}
ClassA::~ClassA()
{
delete m_logFiles;
DeleteCriticalSection(&criticalSection);
}
void ClassA::run()
{
EnterCriticalSection(&criticalSection);
// do some stuff
m_logFiles->WriteToFile(message);
// do some stuff
m_logFiles->WriteToFile(message);
LeaveCriticalSection(&criticalSection);
}
ログファイルには、すべての情報が含まれているわけではありません (たとえば、4 つのスレッドのうち 2 つのデータのみ)、または上書きされた行 (2 つのスレッドが同時に書き込まれた) です。
それで、LogFiles の WriteToFile メソッドも保護する必要があると思いますか?!
助けや例をありがとう!