MFC 简单的线程对话框问题
我想问下,在UI线程中new创造非模态对话框后,关闭线程对话框为什么也关闭了呢?是不是在别的地方调用postquitMessage();参数是该线程的wdExitCode...
我想问下,在UI线程中new创造非模态对话框后,关闭线程对话框为什么也关闭了呢?
是不是在别的地方调用postquitMessage();参数是该线程的wdExitCode就行了,在启动他的线程函数中行吗?
void mythread()
{
pThread = AfxBeginThread(RUNTIME_CLASS(CMyThread));
::PostQuitMessage(wd_MyExitCode);
}
回 arbies
我关闭的是创造非模态对话框的线程,对话框也会关闭吗?
是不是虽然关闭了,但是还没有销毁要发送wm_close才会销毁
回 arbies
就是说在线程中创建的东西如果结束线程都会关闭吗?
对话框销毁了吗? 展开
是不是在别的地方调用postquitMessage();参数是该线程的wdExitCode就行了,在启动他的线程函数中行吗?
void mythread()
{
pThread = AfxBeginThread(RUNTIME_CLASS(CMyThread));
::PostQuitMessage(wd_MyExitCode);
}
回 arbies
我关闭的是创造非模态对话框的线程,对话框也会关闭吗?
是不是虽然关闭了,但是还没有销毁要发送wm_close才会销毁
回 arbies
就是说在线程中创建的东西如果结束线程都会关闭吗?
对话框销毁了吗? 展开
3个回答
展开全部
每个窗口都有个属性:线程ID,你可以用Spy++看到窗口对应的线程ID
那么当这个线程被结束了,显然窗口就没有存在的基础了
如果线程被强制结束,这是不健康的,建议不要这样
wm_close应该没有被执行
你可以看看你的非模态对话框对应的线程ID是不是跟你关闭的线程ID一样
如果要验证窗口是不是被销毁了,你可以使用Spy++这个工具,他可以枚举进程下的窗口,自己看看就知道了
Spy++是visual studio的一个工具
那么当这个线程被结束了,显然窗口就没有存在的基础了
如果线程被强制结束,这是不健康的,建议不要这样
wm_close应该没有被执行
你可以看看你的非模态对话框对应的线程ID是不是跟你关闭的线程ID一样
如果要验证窗口是不是被销毁了,你可以使用Spy++这个工具,他可以枚举进程下的窗口,自己看看就知道了
Spy++是visual studio的一个工具
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我已经讲过了,线程中分配其实跟一般函数分配没什么区别,窗口消失的关键是窗口的依赖关系,即父窗口关了,其所有的子窗口都将关闭。
另外,如果main/winmain函数结束了,程序也就运行完毕,所有数据都将被清除,包括窗口。
你要检查的是这两个地方,而不是线不线程的问题。
不再修改回复。
另外,如果main/winmain函数结束了,程序也就运行完毕,所有数据都将被清除,包括窗口。
你要检查的是这两个地方,而不是线不线程的问题。
不再修改回复。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在UI线程中new创造非模态对话框,你用的什么变量保存这个新创建的非模态对话框,要使用非模态对话框,应该用一个全局的变量,你在线程中的变量只是局部变量,线程运行完了,变量就会销毁,当然对话框也就销毁了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询