Как это работает? Безопасность в одном потоке...
От: demidov2  
Дата: 22.02.07 11:40
Оценка:
Привет! Происходит наслоение сообщений таймера. Вот грубый пример.

//окна выскакивают без остановки
void OnTimer()
{
MessageBox(hMainWnd, "Таймер. ", szCaption, MB_ICONERROR|MB_OK);
...

//окна тоже выскакивают без остановки. почему это не работает?
CRITICAL_SECTION ScanCS;
InitializeCriticalSection(&ScanCS);

void OnTimer()
{
EnterCriticalSection(&ScanCS);
MessageBox(hMainWnd, "Таймер. ", szCaption, MB_ICONERROR|MB_OK);
LeaveCriticalSection(&ScanCS);
...

//а это работает
bool Timer = false;
void OnTimer()
{
if (Timer)
return;
Timer = true;

MessageBox(hMainWnd, "Таймер. ", szCaption, MB_ICONERROR|MB_OK);
Timer = false;
...

Как решать эту проблему грамотно? Кто-нибудь, обьясните как работает система в этом случае. Она что, не ждет обработки сообщения?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.