主线程进行运算,子线程显示对话框负责进度的显示,这样是可以的吗?

时间:2020-12-25 19:21:58
我见过的多线程的例子都是主线程开一个子线程来处理一些大量费时的运算,主线程弹出一对话框来显示运算进度。但现在我想能不能主线程来进行运算,并通过给子线程传数据来控制让子线程来显示运算进度,我试着这样做了,但是每次总是在主线程运算完之后,子线程的进度对话框才会显示出来并马上关闭(因为主线程算完了,让它关闭的),我调试跟了一下,发现每次总是在子线程在创建对话框要显示的时候子线程就停了,不知道为什么?是不是有什么地方我没有注意到,希望高手指点,谢谢!

7 个解决方案

#1


这样是可以的,只不过不能让主线程计算完成后就退出,要不然会导致进程退出,其它线程也就没了

#2


主线程默认就是ui线程,自然UI操作放主线程,而一般的子线程都是worker线程,主要负责计算等工作,而不是UI相关的

#3


线程中创建对话框时指定父窗口为CWnd::GetDesktopWindow(),不要把主线程窗口作为父窗口。
参考这个帖子:
http://topic.csdn.net/u/20090831/16/38ce7d95-f0ad-43a3-bd3c-4bff44633ec0.html

#4


帮顶

#5


同意三楼

#6


UP

#7


引用 3 楼 cnzdgs 的回复:
线程中创建对话框时指定父窗口为CWnd::GetDesktopWindow(),不要把主线程窗口作为父窗口。
参考这个帖子:
http://topic.csdn.net/u/20090831/16/38ce7d95-f0ad-43a3-bd3c-4bff44633ec0.html

嗯,我按照你说的试了,确实可以,哈哈,谢谢大侠!

#1


这样是可以的,只不过不能让主线程计算完成后就退出,要不然会导致进程退出,其它线程也就没了

#2


主线程默认就是ui线程,自然UI操作放主线程,而一般的子线程都是worker线程,主要负责计算等工作,而不是UI相关的

#3


线程中创建对话框时指定父窗口为CWnd::GetDesktopWindow(),不要把主线程窗口作为父窗口。
参考这个帖子:
http://topic.csdn.net/u/20090831/16/38ce7d95-f0ad-43a3-bd3c-4bff44633ec0.html

#4


帮顶

#5


同意三楼

#6


UP

#7


引用 3 楼 cnzdgs 的回复:
线程中创建对话框时指定父窗口为CWnd::GetDesktopWindow(),不要把主线程窗口作为父窗口。
参考这个帖子:
http://topic.csdn.net/u/20090831/16/38ce7d95-f0ad-43a3-bd3c-4bff44633ec0.html

嗯,我按照你说的试了,确实可以,哈哈,谢谢大侠!