中断调用函数中的 while 循环
Breaking a while loop in a called Function
单击开始按钮时,函数 RunB() 执行 while 循环。我需要使用停止按钮中途中断 while 循环执行。
switch (msg)
{
case WM_CREATE:
CreateWindow(TEXT("button"), TEXT("Browser"),
WS_VISIBLE | WS_CHILD,
30, 100, 80, 25,
hwnd, (HMENU)1, NULL, NULL);
CreateWindow(TEXT("button"), TEXT("Stop"),
WS_VISIBLE | WS_CHILD,
30, 200, 80, 25,
hwnd, (HMENU)2, NULL, NULL);
break;
case WM_COMMAND:
if (LOWORD(wParam) == 1) {
Obj.RunB();
}
break;
if (LOWORD(wParam) == 2) {
//Code to break the while loop
}
break;
被调用函数 RunB 的代码:
void RunB(){
while(n<15){
//Some statements here:
}
如何使用停止按钮打破 while 循环?
事件驱动的操作(即按下按钮)不应该涉及循环或业务逻辑。否则,整个窗口将暂停,直到获得同步响应。
如果你发现你有一些模态操作需要很长时间才能完成,并且你绝对无法分解它,那么你需要定期处理来自模态操作中的消息。
例如:
while(n<15){
DoAPieceOfWork(n);
FlushPendingMessages();
}
FlushPendingMessages将实现如下:
void FlushPendingMessages(){
MSG msg;
while(PeekMessage(&msg,0,0,0,PM_REMOVE)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
这将使您的应用程序保持大部分响应。通常,您还会同时显示无模式对话框,以便人们知道您的应用程序很忙并且无法与之交互。
更正确地说,在调用 TranslateMessage/DispatchMessage 之前,您还必须检查WM_QUIT并重新发布它以终止您的应用程序,您还可以显式检查 WM_APP+x 消息 - 使用如下代码:
#define WM_APP_QUITLOOP (WM_APP+1)
// use this from anywhere to tell your processing loop to quit
PostMessage(NULL,WM_APP_QUITLOOP,0,0L);
BOOL FlushPendingMessages(){
MSG msg;
while(PeekMessage(&msg,0,0,0,PM_REMOVE)){
switch(msg.message){
case WM_APP_QUITLOOP:
return FALSE;
case WM_QUIT:
PostQuitMessage(msg.wParam);
return FALSE;
default:
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return TRUE;
}
您的处理循环需要检查 FlushPendingMessages
的返回值,如果它当然为 FALSE,则中止。
编辑:根据@IInspectable的评论。
相关文章:
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- while循环中while循环的时间复杂度是多少
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 擦除while循环中迭代的元素
- 为什么我不能在 while 循环中创建线程?
- 退出简单while循环时出现问题
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 即使没有满足他们的条件,我也无法通过一些 do-while 循环
- 嵌套While循环不起作用(C++问题)
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- 使用 GMP 的 while 循环出现问题
- 程序以使用 C++ 中的 while 循环查找一组数字的最小值
- 为什么在 while 循环中返回表达式不起作用
- 如何使用 do while 循环确定最高值和最低值
- 如何读取单个字符并在输入两个字符序列时输出? 使用 while 循环和C++
- 用于在 C++ 中使用 while 循环查找下一个素数的简单函数
- OpenCV QT,显示视频的帧(不使用while循环)
- 在 while 循环中使用 pow() 函数 C++
- C++ 制作/命名不初始化的向量(在 while 循环中)
- std::getline没有在while循环中重新请求用户输入