DrawingThread.h
Код: Выделить всё
class DrawingThread {
bool stopRequested;
Runtime::Monitor CSMonitor;
CPInfo *pPInfo;
//More..
}
Код: Выделить всё
void DrawingThread::Run() {
if (!stopRequested)
//Time consuming call#1
if (!stopRequested) {
CSMonitor.Enter();
pPInfo = new CPInfo(/**/);
//Not time consuming but pPInfo must either be null or constructed.
CSMonitor.Exit();
}
if (!stopRequested) {
pPInfo->foobar(/**/);//Time consuming and can be signalled
}
if (!stopRequested) {
//One more optional but time consuming call.
}
}
void DrawingThread::RequestStop() {
CSMonitor.Enter();
stopRequested = true;
if (pPInfo) pPInfo->RequestStop();
CSMonitor.Exit();
}
Код: Выделить всё
lock
Мои наставники советовали защищать даже bool
Мои наставники советовали защищать даже bool
Мои наставники советовали защищать даже bool
code>, потому что чтение/запись могут быть не атомарными. Я думаю, что этот одноразовый флаг — исключение, подтверждающее правило?
Подробнее здесь: https://stackoverflow.com/questions/920 ... -thread-ma