mfc在子线程中创建窗口,当主框架阻塞时,线程窗口为什么也被阻塞了?

linxiong520 2019-03-22 05:41:12
mfc单文档程序,使用Afxbeginthread(cwinthread*,)创建一个ui线程,在线程里面创建了一个窗口。现在主框架阻塞在绘图函数中了,那请问这个时候线程中的那个窗口会被阻塞吗?如果被阻塞了,为什么呢?怎么做到主框架阻塞在绘图时不阻塞某个窗口响应消息呢?
...全文
845 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
零隐 2019-04-19
  • 打赏
  • 举报
回复
会有点影响,但是大致可以正常运行。
因为有的消息分发,是子窗口如果不运行,会转到父窗口运行。
丁劲犇 2019-04-07
  • 打赏
  • 举报
回复
GUI在子线程里曾经在初学MFC时用过,但是很可惜水平不够,老是出问题。后来一直用的是PostThreadMessage、PostMessage来交互
schlafenhamster 2019-04-07
  • 打赏
  • 举报
回复
pthread->postthreadmessage(wm_test,0,0);
while(1); ??

while(1) Sleep(100) ;
蒋晟 2019-04-07
  • 打赏
  • 举报
回复
指定父窗口的关键代码,你就给了一段省略号……我怎么知道有没有问题。
linxiong520 2019-04-03
  • 打赏
  • 举报
回复
引用 10 楼 蒋晟的回复:
IE6就是多个主框架,每个主框架都在不同线程里,阻塞互不影响的。 窗口之间有父子关系的话,放在不同线程有问题,因为擦除什么的都会互相等待,不同线程的窗口要独立。
像八楼的代码这样,你看看有没有问题
linxiong520 2019-04-03
  • 打赏
  • 举报
回复
引用 11 楼 hurryboylqs的回复:
你自己的界面线程有自己的消息循环,怎么会互相阻塞?不会的!除非你逻辑写得有问题
逻辑,八楼有代码哇。。。。。
hurryboylqs 2019-04-02
  • 打赏
  • 举报
回复
你自己的界面线程有自己的消息循环,怎么会互相阻塞?不会的!除非你逻辑写得有问题
蒋晟 2019-04-02
  • 打赏
  • 举报
回复
IE6就是多个主框架,每个主框架都在不同线程里,阻塞互不影响的。 窗口之间有父子关系的话,放在不同线程有问题,因为擦除什么的都会互相等待,不同线程的窗口要独立。
向立天 2019-04-02
  • 打赏
  • 举报
回复
子线程不会阻塞
但不建议这么操作
应该尽量避免主线程阻塞
linxiong520 2019-03-25
  • 打赏
  • 举报
回复
引用 5 楼 smwhotjay的回复:
子线程里创建窗口,在子线程里消息循环,他拥有它自己的循环啊,和主线程不相干啊,不会阻塞的。
我在下面把代码简单的写了一下,能不能帮我看一下,是不是代码思路不对?
linxiong520 2019-03-25
  • 打赏
  • 举报
回复
引用 6 楼 叶恭介1989的回复:
没遇过线程里创建窗口,能改成发消息让主对话框去创建吗?
void cdlg::onbnclickbutton1() { _begindthread(threadfun, 0,0); while(1); } void threadfun(void* argu) { cwinthread* pthread = _afxbeginthread(runtime_class(cmythread)); pthread->postthreadmessage(wm_test,0,0); while(1); } void cmythread::ontest(...) { if(ptest != null) { ptest = new cdlgtest; ptest->create(...); ptest->showwindow(....); } }
linxiong520 2019-03-25
  • 打赏
  • 举报
回复
引用 6 楼 叶恭介1989的回复:
没遇过线程里创建窗口,能改成发消息让主对话框去创建吗?
就是因为主线程在忙,才开另一个线程创建窗口的
linxiong520 2019-03-23
  • 打赏
  • 举报
回复
引用 3 楼 蒋晟的回复:
除非你AttachThreadInput或者SetParent/SetOwner了否则两个界面线程不应该互相阻塞啊。
主框架死循环,另一个线程的窗口不会阻塞吗?
叶恭介叶恭介 2019-03-23
  • 打赏
  • 举报
回复
没遇过线程里创建窗口,能改成发消息让主对话框去创建吗?
蒋晟 2019-03-23
  • 打赏
  • 举报
回复
除非你AttachThreadInput或者SetParent/SetOwner了否则两个界面线程不应该互相阻塞啊。
smwhotjay 2019-03-23
  • 打赏
  • 举报
回复
子线程里创建窗口,在子线程里消息循环,他拥有它自己的循环啊,和主线程不相干啊,不会阻塞的。
linxiong520 2019-03-22
  • 打赏
  • 举报
回复
引用 1 楼 schlafenhamster的回复:
主框架阻塞 , 如果是 死循环 , 必须 kill 这个 进程。
什么意思?其实我就是想,主框架阻塞的时候,线程中的窗口不阻塞
schlafenhamster 2019-03-22
  • 打赏
  • 举报
回复
主框架阻塞 , 如果是 死循环 , 必须 kill 这个 进程。

15,979

社区成员

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

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