线程间的通信主要针对主线程和次线程来说。而线程间的同步是针对两个或多个次线程来说的。
一般而言,应用程序中的一个次要线程总是为主线程执行特定的任务,这样,主线程和次要线程间必定有一个信息传递的渠道,也就是主线程和次要线程间要进行通信。这样线程间的通信不但是难以避免的,而且在多线程编程中也是复杂和频繁的。一般可以使用全局变量进行通信和自定义消息进行通信。
1.使用全局变量进行通信
由于属于同一个进程的各个线程共享操作系统分配该进程的资源,所以可以通过全局变量来解决线程间的通信。建议使用 volatile 修饰符,它告诉编译器无需对该变量进行任何的优化,即无需将它放到一个寄存器中,并且该值可被外部改变。如果线程间所需传递的信息比较复杂,可以定义一个结构,通过传递指向该结构的指针进行传递消息。接着让线程监视这个变量(标志位),当这个变量符合一定的条件时,表示线程应该终止。
bool bExit = 1; //全局变量,用来监视线程是否结束,可以在需要结束
//线程的地方将 bExit 置为 0
UINT WorkThread(LPVOID param) //全局线程函数
{
int nPos = 0;
while(nPos < 500 && bExit)
nPos++;
return 0;
}
2.使用自定义消息进行通信