社区
进程/线程/DLL
帖子详情
子线程暂停, 主线程阻塞?
poorb
2008-08-04 05:12:27
MFC 对话框小程序中
建立的子线程暂停后,为何无法控制对话框中按钮使用 MessageBox以及 AfxMessageBox ?
网上搜索后有些迷糊,有人说用 MsgWaitForMultipleObject() 函数
但是偶研究半天也没弄好, 各位大大能给个例子么?
谢谢了
@_@
...全文
429
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的异步队列信号槽)来批量处理数据。 综上所述,通过创建QThread
子
类,将耗时操作移到
子
线程
的run()函数,同时利用信号槽进行
线程
间通信...
Android
主
线程
和
子
线程
区别详解
而
子
线程
则是开发者为了实现耗时任务(如网络请求、数据处理)而创建的新
线程
,避免阻塞
主
线程
,保证用户界面的流畅性。
主
线程
具有以下特点: 1. UI界面及其相关事件处理都在
主
线程
中进行。 2. Main函数运行在
主
线...
采用MediaPlayer播放网络音频和本地音频(
子
线程
里快速启动/切换播放音频)
- 默认情况下,Android系统建议在
主
线程
之外处理多媒体播放,以避免阻塞UI
线程
。因此,在
子
线程
中使用MediaPlayer可以提高应用的响应速度,防止用户界面冻结。 2. **在线播放音频**: - MediaPlayer支持HTTP或...
Python多
线程
:
主
线程
等待所有
子
线程
结束代码
最后,我们通过`t.join()`来阻塞
主
线程
,使其等待所有
子
线程
完成。`t.join()`会使得
主
线程
暂停
,直到调用它的
线程
(即
子
线程
)结束。因此,当我们遍历`thread_list`并调用`join()`时,
主
线程
会等待所有
子
线程
执行...
C# Tread浅析
#### 二、
主
线程
与
子
线程
1. **
主
线程
**:在C#应用程序启动时,默认会有一个
主
线程
来执行`Main`方法。这个
主
线程
负责程序的初始化及后续的执行流程。可以通过`Thread.CurrentThread`获取当前
线程
的信息。 ```...
进程/线程/DLL
15,466
社区成员
49,169
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章