社区
进程/线程/DLL
帖子详情
子线程暂停, 主线程阻塞?
poorb
2008-08-04 05:12:27
MFC 对话框小程序中
建立的子线程暂停后,为何无法控制对话框中按钮使用 MessageBox以及 AfxMessageBox ?
网上搜索后有些迷糊,有人说用 MsgWaitForMultipleObject() 函数
但是偶研究半天也没弄好, 各位大大能给个例子么?
谢谢了
@_@
...全文
431
15
打赏
收藏
子线程暂停, 主线程阻塞?
MFC 对话框小程序中 建立的子线程暂停后,为何无法控制对话框中按钮使用 MessageBox以及 AfxMessageBox ? 网上搜索后有些迷糊,有人说用 MsgWaitForMultipleObject() 函数 但是偶研究半天也没弄好, 各位大大能给个例子么? 谢谢了 @_@
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhengw1212
2011-08-28
打赏
举报
回复
看看,飘过。
gaoteng1984
2008-08-05
打赏
举报
回复
楼主好大方;-)
poorb
2008-08-05
打赏
举报
回复
谢谢 楼上的兄弟,我去试试!
gaoteng1984
2008-08-05
打赏
举报
回复
全局变量:
HANDLE hSuspend, hResume;
主线程:
hSuspend= CreateEvent(NULL, FALSE, FALSE, NULL);
hResume= CreateEvent(NULL, FALSE, FALSE, NULL);
CreateThread(...);
...
SetEvent(hSuspend); // 用这个来暂停线程
...
...
SetEvent(hResume); // 用这个来继续线程
子线程:
while(true)
{
... // Do work.
DWORD rtn = WaitForSingleObject(hSuspend, 50);
if (WAIT_OBJECT_0 == rtn)
{// 自己暂停自己
WaitForSingleObject(hResume, INFINITE);
}
}
poorb
2008-08-05
打赏
举报
回复
应该是正确的,代码是别人的,后来我自己也试过,确实有这问题,
网上搜索到了类似的问题,但是他们他们解决的办法我看的都不是很清晰,
说是要用到:MsgWaitForMultipleObject()
可以在阻塞的时候依然能接受到消息
但是 我没有用好,希望大家帮帮忙啊,
还有,AfxMessageBox 属于什么消息类型呢? 就是在 PostMessage里的.
liyinlei
2008-08-05
打赏
举报
回复
暂停子线程,怎么会影响主线程呢?SuspendThread()是否正确返回,传入thread句柄是否正确
poorb
2008-08-05
打赏
举报
回复
其实问题很简单,很通用的,就是 基于MFC 对话框的小程序, 如果 我为了完成任务,建立了一个线程
那么现在我暂停了这个线程,但此时貌似消息队列也死住了,电击对话框上的按纽 使之弹出AfxmessageBox的对话框,但是在这里卡住了
简单描述就是 非主线程暂停后, 主线程无法完成弹出对话框的操作.
代码很简单 譬如
CreateThread() 建立了一个线程
然后
SuspendThread() 暂停了这个线程
这样的话,电击个按扭想要谈出对话框:
void ABCDlg::OnButton1()
{
AfxMessageBox("Hello");
}
在AfxMessageBox这里就会 死住...
gaoteng1984 : 用EVENT如何做呢?
poorb
2008-08-05
打赏
举报
回复
哈哈 新来的,不会给,都便宜你了,哈哈哈哈
你以后要照顾我啊!!!
liyinlei
2008-08-04
打赏
举报
回复
LZ问题没描述清楚,贴出相关代码
gaoteng1984
2008-08-04
打赏
举报
回复
不要使用SuspendThread来暂停目标线程。用Event来同步。
ouyh12345
2008-08-04
打赏
举报
回复
子线程和主线程的逻辑关系是什么?
poorb
2008-08-04
打赏
举报
回复
线程中是有关读取文本文件的操作
通过 suspendthread() 暂停后, 程序中惦记按钮就无法弹出对话框, 在 AfxmessageBox那里死住.
如果不暂停,线程顺利的运行,也可以很好的弹出对话框.
要求就是如何不让他死住呢? 死锁了 该如何解决?
cnzdgs
2008-08-04
打赏
举报
回复
估计是死锁了,线程中做了些什么?
Allen_zhang
2008-08-04
打赏
举报
回复
把你的代码片段和用意说说看
看不明白你想说什么
kakashi0309
2008-08-04
打赏
举报
回复
线程之间有什么通信吗 注意同步问题 防止死锁
qt 多
线程
防止
主
线程
做循环操作导致界面假死
qt 多
线程
防止
主
线程
做循环操作导致界面假死。试过多
线程
的几种方法,只有这个方法可行。代码亲测可行。在
子
线程
死循环,界面正常不死!!!
Android
主
线程
和
子
线程
区别详解
主
线程
和
子
线程
的区别 每个
线程
都有一个唯一标示符,来区分
线程
中的
主
次关系的说法。
线程
唯一标示符:Thread.CurrentThread.ManagedThreadID; UI界面和Main函数均为
主
线程
。 被Thread包含的“方法体”或者“委托”均为
子
线程
。 委托可以包含多个方法体,利用this.Invoke去执行。 也可以定义多种方法体,放在Thread里面去执行。则此方法体均为
子
线程
。注意如果要修改UI界面的显示。则需要使用this.Invoke,否则会报异常。 Main函数为
主
线程
,id标示符与UI界面
主
线程
相等 不多说了。看下面的测试代码注释吧。 pu
采用MediaPlayer播放网络音频和本地音频(
子
线程
里快速启动/切换播放音频)
百度没解决只好自己鲁。百度上好多仅仅是播放网络音频简单的一条测试,很多条目的时候快速切换经历了很多mediapleayer播放异常。
Python多
线程
:
主
线程
等待所有
子
线程
结束代码
主
要介绍了Python多
线程
:
主
线程
等待所有
子
线程
结束代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
C# Tread浅析
C# Tread浅析
进程/线程/DLL
15,466
社区成员
49,169
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章