我有一个在线程中执行的长时间运行的任务。
这一切的代码都在一个单独的类中,而不是WinMain()
入口点,例如WorkerClass
。
我希望随着任务的进展,经常更新进度条。
经过几个小时的研究,试验和错误,我遇到了几种方法:
A)从线程内部自定义PostMessage
到主窗口proc(问题:几个来源不赞成:线程不应该触及主UI)
B)自定义PostMessage
来自某些WorkerClass
函数的主窗口proc(问题:遇到自由与类函数之间的范围问题,因为线程函数必须没有类)< / em>
C)工作线程更新int
指针,然后UI线程计时器定期更新UI (问题:值得花时间,或者这是“做错了”)
很多讨论都涉及MFC或C#,我对此并不感兴趣。
我已经到了用三种方法遇到障碍的地步。搞好一个人的工作还需要几个小时 - 我不想付出错误的努力。
我应该追求哪一个?
答案 0 :(得分:2)
FWIW:我目前正在处理的代码库将消息发布到主线程。
另一种方法,也就是我喜欢的方法,是观察者模式。主线程将“订阅”工作者,并且只要工作者自我更新,它就会通知其观察者(订阅它的任何对象)。 http://en.wikipedia.org/wiki/Observer_pattern