0%

WxWidgets学习笔记-3-多线程编程

​ 大多数时候,事件驱动的GUI程序可以给你造成一个很好的假象:多个任务在同时的运行这是因为,重绘窗口通常只占用很少的时间,用户输入也被很快的进行了处理.然后,有时候,有些任务很难将其分割成足够小的让人难以察觉的小块来运行,这时候就要使用多线程编程了,本章我们来介绍一下在wxWidgets中怎样实现多线程编程在本章的最后,我们将介绍一下多线程编程的一些替代解决方案..

1.使用wxThread

如果你要在你的代码中使用线程,首先要实现一个wxThread的派生类,并且至少要重载其虚函数Entry,这个函数包含了线程要做的主要的事情举例来说,比如我们要用一个单独的线程来计算图片中颜色的数目,下面是我们的派生类的声明:

1
2
3
4
5
6
7
8
9
10
11
12
class MyThread : public wxThread 
{
public:
MyThread(wxImage∗ image, int∗ count):
m image(image), m count(count) {}
virtual voidEntry(); 、
private :
wxImage∗ m image;
int∗ m count;
};
//一个标识符用来在线程工作完成的时候通知应用程序
#define ID_COUNTED_COLORS_100

Entry函数用来进行计算工作并且返回一个返回值(对于联合线程(即将介绍),Wait函数将返回这个值),下面是我们的Entry函数:

1
2
3
4
5
void ∗MyThread::Entry() {
(∗ m count) = m image−>CountColours();
// . wxCommandEvent event(wxEVT COMMAND MENU SELECTED, ID COUNTED COLORS);
wxGetApp().AddPendingEvent(event); return NULL;
}

欢迎关注我的其它发布渠道