我創建了一個帶兩個按鈕的簡單窗口,第一個調用持續很長時間的函數, 第二個將變量的值設置爲「stop」 TRUE, 最初設置爲FALSE。如何使用「停止按鈕」來停止進程
我的意圖是,通過按下第一個按鈕,它運行一個漫長的過程, 如果停止變量設置爲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()是正確的? (我是新手:))
謝謝!
歡迎來到併發編程的世界! – 2010-08-05 14:09:18