子线程暂停, 主线程阻塞?

poorb 2008-08-04 05:12:27
MFC 对话框小程序中
建立的子线程暂停后,为何无法控制对话框中按钮使用 MessageBox以及 AfxMessageBox ?

网上搜索后有些迷糊,有人说用 MsgWaitForMultipleObject() 函数
但是偶研究半天也没弄好, 各位大大能给个例子么?
谢谢了
@_@
...全文
429 15 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
线程之间有什么通信吗 注意同步问题 防止死锁

15,466

社区成员

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

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