线程间通信的三种方法 (转)
http://www.cnblogs.com/puxidun/archive/2009/12/06/1618142.html
线程间通信的三种方法
1.全局变量
注:定义全局变量时最好使用volatile来定义,以防编译器对此变量进行优化。
常用的Message通信的接口主要有两个:PostMessage和PostThreadMessage,
PostMessage为线程向主窗口发送消息。而PostThreadMessage是任意两个线程之间的通信接口。
B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);
MS还提供了SendMessage方法进行消息间通讯,SendMessage(),他和PostMessage的区别是:
2.2.PostThreadMessage()
函数原型:BOOL PostThreadMessage(DWORD idThread,UINT Msg,WPARAM wParam, LPARAM lParam);
目标线程通过GetMessage()方法来接受消息。
3.CEvent对象
线程间通信可以通过下列三种方法:
1)使用全局变量实现线程间通信
2)使用消息实现线程间通信
3)使用CEvent类实现线程间通信
使用全局变量实现线程间通信:
定义一个全局变量,不同的线程间可以通过修改全局变量的值来进行通信。例如:定义一个控制线程的全局变量
volatile int threadController;
当 threadController值为1时,线程running;当threadController为0时,线程stop, 所以可以通过修改threadController的值来控制线程的运行。
使用消息实现线程间通信:
步骤:
1)在View.h中定义消息:
例如:
const WM_THREAD_SENDMESS=WM_USER+20;
2)在view.h中添加消息函数声明:
UINT TreadProc(LPVOID param)