我创建了一个带有两个按钮的简单窗口,第一个按钮调用一个长时间运行的函数,第二个按钮将变量"stop"的值设置为TRUE,该变量最初设置为FALSE。
我的意图是,通过按下第一个按钮,它会运行一个长时间的进程,该进程控制每个循环中stop变量是否设置为TRUE或FALSE,如果该值为TRUE,则函数应返回,因此该进程被停止。
我的意图是,通过按下第一个按钮,它会运行一个长时间的进程,该进程控制每个循环中stop变量是否设置为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()是正确的方法吗?(我是新手 :))
谢谢!