gpt4 book ai didi

c++ - 如何使用 "Stop Button"停止进程

转载 作者:可可西里 更新时间:2023-11-01 17:03:55 32 4
gpt4 key购买 nike

我创建了一个带有两个按钮的简单窗口,第一个调用一个持续很长时间的函数,第二个将变量“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() 是正确的吗? (我是新手 :) )

谢谢!

最佳答案

您需要在单独的线程上运行长进程,您的方法应该可行。

这不是仅仅在 单击开始按钮 时调用 longProcess 函数,而是创建一个线程,然后在其上运行长进程。

发生的情况是您的长进程阻塞了负责处理 UI 事件的 UI 线程。因此,在 longProcess() 完成之前,不会处理停止按钮单击

关于c++ - 如何使用 "Stop Button"停止进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3414696/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com