从线程更新进度条的最佳方法

时间:2012-11-22 03:24:10

标签: c++ multithreading winapi progress-bar

我有一个在线程中执行的长时间运行的任务。

这一切的代码都在一个单独的类中,而不是WinMain()入口点,例如WorkerClass

我希望随着任务的进展,经常更新进度条。

经过几个小时的研究,试验和错误,我遇到了几种方法:


A)从线程内部自定义PostMessage到主窗口proc(问题:几个来源不赞成:线程不应该触及主UI)

B)自定义PostMessage来自某些WorkerClass函数的主窗口proc(问题:遇到自由与类函数之间的范围问题,因为线程函数必须没有类)< / em>

C)工作线程更新int指针,然后UI线程计时器定期更新UI (问题:值得花时间,或者这是“做错了”)


很多讨论都涉及MFC或C#,我对此并不感兴趣。

我已经到了用三种方法遇到障碍的地步。搞好一个人的工作还需要几个小时 - 我不想付出错误的努力。

我应该追求哪一个?

1 个答案:

答案 0 :(得分:2)

FWIW:我目前正在处理的代码库将消息发布到主线程。

另一种方法,也就是我喜欢的方法,是观察者模式。主线程将“订阅”工作者,并且只要工作者自我更新,它就会通知其观察者(订阅它的任何对象)。 http://en.wikipedia.org/wiki/Observer_pattern