Я создал простое окно с двумя кнопками,
первый вызывает функцию, которая длится долго,
второй устанавливает значение переменной «stop» в TRUE,
изначально было установлено значение ЛОЖЬ.
Мое намерение состоит в том, чтобы, нажимая первую кнопку, она запускает долгий процесс,
это контролирует, если переменная останова установлена в TRUE или FALSE для каждого цикла,
если значение TRUE, функция должна вернуться, поэтому процесс останавливается.
...
static BOOL stop = FALSE; // My variable defined somewhere
...
int longProcess () // My function
{
while(stop == FALSE) {
// do something
}
return 0;
}
...
switch (msg)
{
case WM_CREATE:
{
...
Button1 = CreateWindowEx(0,
TEXT("BUTTON"),
TEXT("Start"),
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
100, 100, 100, 20,
hWnd,
(HMENU)BUTTON_START,
NULL,
NULL);
Button2 = CreateWindowEx(0,
TEXT("BUTTON"),
TEXT("Stop"),
WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
200, 200, 100, 20,
hWnd,
(HMENU)BUTTON_STOP,
NULL,
NULL);
...
}
break;
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case BUTTON_START:
longProcess(); // Starts the process
break;
case BUTTON_STOP:
stop = TRUE; // Should stop the process
break;
}
}
break;
...
}
}
Проблема в том, что когда я нажимаю первую кнопку, процесс начинается нормально,
но когда я нажимаю вторую кнопку, чтобы остановить процесс, ничего не происходит,
Я заметил, что переменная останова установлена в TRUE только после окончания процесса.
Я думал, что, вероятно, в проблеме, связанной с очередью сообщений ...
Что может быть лучшим решением ???
Правильно ли вызывать longProcess () там и так? (Я новичок :))
Спасибо!