2012-11-22 47 views
1

我有一个在线程中执行的长时间运行的任务。从线程更新进度栏的最佳方法

这一切的代码发生在与WinMain()入口点不同的类中,例如WorkerClass

我希望每隔一段时间更新一次进度条,以便随时了解任务的进度。

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


A)自PostMessage到主窗口过程从线程(问题里面:由几个皱眉来源:线程不应该从一些WorkerClass功能(问题点触控主UI)

B)自定义PostMessage主窗口过程:运行到免费VS类函数之间的范围问题,因为线程函数必须是免费的类)

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


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

我到了用三种方法遇到障碍的地步。做好一件事要花好几个小时 - 我不想费力去学习它。

我应该追求哪一个?

回答

2

FWIW:我目前工作的代码库将消息发布到主线程。

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

+0

好吧,这听起来像代码库使用'A',但你更喜欢'B'? – Ben

+1

我更喜欢主线程在工作线程中注册的地方。然后,当工作线程更新其进程时,其“UpdateProgress()”函数遍历所有订户并调用其“ProgressUpdated()”函数 - 实质上是一个回调函数。 –

+0

谢谢,结合我的下一个问题(http://stackoverflow.com/questions/13506377/trouble-referencing-class-in-structure-using-this-keyword#13506421)我现在有东西工作得很好。 – Ben