关于多线程的问题

时间:2010-09-30 22:00:44

标签: c++ multithreading

我想制作一个简单的GUI API。基本上它的工作方式是gui小部件基本上是一个无限循环中的线程。该线程有一个指向小部件类的指针。我想要它的工作方式基本上类似于WinAPI。我会做这样的事情:

textbox->SendMessage("Click",args); 
然后将

添加到其队列中进行处理。最终,这将调用一个指向函数,它将是click事件处理程序。我希望能够做的另一件事是在类中安全地获取和设置东西,而不必担心工作线程是否正在使用它。例如,如果我在工作人员出队时发送消息(添加到队列中),则可能会导致问题。我正在使用boost :: thread。我究竟应该为自己的情况做些什么呢?

由于

2 个答案:

答案 0 :(得分:1)

您是否有理由进行GUI开发?

有一个很好的理由,几乎所有GUI库都依赖单个线程来管理“小部件”。多线程很难;在使用大型外露接口编写控件时,您需要非常小心地设计它。随着线程(窗口小部件)数量的增加,当你接近操作系统的线程限制时,你也会遇到可伸缩性问题,或者如果失败,你会增加调度程序的负载,使一些线程开始饿死。

我的建议是使用典型的单线程消息泵重新设计,将输入事件推送到窗口小部件并拉出其结果状态。

答案 1 :(得分:0)

这听起来很像“活动对象”模式,其中一个对象在其自己的私有线程中运行对其方法的调用。

由于您使用的是C ++,因此您可能会发现Herb Sutter的有效并发article on active objects非常有用。