VC6.0两个按钮间消息会冲突吗?这样能行吗?

yrx1006_c2 2012-04-02 07:46:04
大家好:
我现在想在一个“获得结果”的按钮里实现一个无限循环,就是一个死循环,但是我界面上还有一个“退出”按钮,假设我想先点击“获得结果”按钮,便一直在这个循环里不会出来,但是一点击“退出”按钮能使对话框关闭,进程结束,这样可行吗?
...全文
93 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
shn521 2012-04-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
大家好:
谢谢大家的热心帮助,可是用peekmessage和消息泵函数,我试过了没用,还是无法响应退出按钮消息,那请问另开线程会不会很复杂呀?
[/Quote]
不复杂,定义一个全局函数,然后再调用一个函数去驱动全局函数就可以了。百度或google下吧。
yrx1006_c2 2012-04-03
  • 打赏
  • 举报
回复
大家好:
谢谢大家的热心帮助,可是用peekmessage和消息泵函数,我试过了没用,还是无法响应退出按钮消息,那请问另开线程会不会很复杂呀?
wltg2001 2012-04-03
  • 打赏
  • 举报
回复
您好,我还想再请问一下,我创建一个新的工作者线程,有一个全局函数,假设我之前所在的类叫做:CCOMDLG,可是我在这个全局函数中也就是一个死循环中,我需要用到CCOMDLG这个类中的成员变量,我怎么在全局函数中引用?
============
线程函数中有一个参数,将CCOMDLG类的指针当作参数传进去就行了。
yrx1006_c2 2012-04-03
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

引用 10 楼 的回复:
大家好:
谢谢大家的热心帮助,可是用peekmessage和消息泵函数,我试过了没用,还是无法响应退出按钮消息,那请问另开线程会不会很复杂呀?

不复杂,定义一个全局函数,然后再调用一个函数去驱动全局函数就可以了。百度或google下吧。
[/Quote]
您好,我还想再请问一下,我创建一个新的工作者线程,有一个全局函数,假设我之前所在的类叫做:CCOMDLG,可是我在这个全局函数中也就是一个死循环中,我需要用到CCOMDLG这个类中的成员变量,我怎么在全局函数中引用?
super_admi 2012-04-03
  • 打赏
  • 举报
回复
这个很明显是一个线程同步问题。

界面线程为主线程。子线程为获得结果,结束条件为:1.获得结果;2.主线程点击“退出”(同步问题就在这里)。
gg606 2012-04-02
  • 打赏
  • 举报
回复
对,两种方法:
1、开个线程,循环放在里面,每循环一次检测一下退出条件
2、加个消息泵函数PumpMessages(),每循环一次调用一下
void CXXXDlg::PumpMessages()
{
MSG msg;
// Handle dialog messages
while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if(!IsDialogMessage(&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}

hdg3707 2012-04-02
  • 打赏
  • 举报
回复
是这样的:
if(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
这么三行代码加在死循环里
hdg3707 2012-04-02
  • 打赏
  • 举报
回复
可以做到,在死循环里得加这几个函数就行了,应该是这样,你试试
1.GetMessage(&msg,NULL,0,0);
2.GetMessage函数
3.TranslateMessage(&msg);
4.DespatchMessage(&msg),
wltg2001 2012-04-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
“死循环”里PeekMessage()
[/Quote]
这也是一个办法。
schlafenhamster 2012-04-02
  • 打赏
  • 举报
回复
“死循环”里PeekMessage()
wltg2001 2012-04-02
  • 打赏
  • 举报
回复
不行的,既然是死循环,你根本就点击不了另一个“退出”按钮,实际上整个界面会死掉。
另开一个线程吧。
zgl7903 2012-04-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 yrx1006_c2 的回复:]
大家好:
我现在想在一个“获得结果”的按钮里实现一个无限循环,就是一个死循环,但是我界面上还有一个“退出”按钮,假设我想先点击“获得结果”按钮,便一直在这个循环里不会出来,但是一点击“退出”按钮能使对话框关闭,进程结束,这样可行吗?
[/Quote]
这样不行, 其它消息都会被阻塞
可以把死循环写成一个后台线程
shn521 2012-04-02
  • 打赏
  • 举报
回复
弄个线程不就完了?
shn521 2012-04-02
  • 打赏
  • 举报
回复
实践是检验真理的唯一标准

代码很简单,为何不实践下

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧