php线程之间的通信,线程间通信方式有哪几种?

本文介绍了Windows环境中线程间通信的三种常见方式:1) 使用消息队列,如sendMessage和postMessage实现线程间的复杂数据交换;2) 利用全局变量进行内存共享,注意使用volatile防止优化;3) 通过CEvent类操作事件对象,利用有信号和无信号状态进行同步。详细阐述了每种方法的实现步骤和应用场景。
摘要由CSDN通过智能技术生成

bdb890e9c77764e63583789c94e8627a.png

线程之间的通信方式有以下几种:

1、消息队列,是最常用的一种,也是最灵活的一种,通过自定义数据结构,可以传输复杂和简单的数据结构。

在Windows程序设计中,每一个线程都可以拥有自己的消息队列(UI线程默认自带消息队列和消息循环,工作线程需要手动实现消息循环),因此可以采用消息进行线程间通信sendMessage,postMessage。

定义消息#define WM_THREAD_SENDMSG=WM_USER+20;

添加消息函数声明afx_msg int OnTSendmsg();

添加消息映射ON_MESSAGE(WM_THREAD_SENDMSG,OnTSM)

添加OnTSM()的实现函数;

在线程函数中添加PostMessage消息Post函数

2、使用全局变量

进程中的线程间内存共享,这是比较常用的通信方式和交互方式。

注:定义全局变量时最好使用volatile来定义,以防编译器对此变量进行优化。

3、使用事件CEvent类实现线程间通信

Event对象有两种状态:有信号和无信号,线程可以监视处于有信号状态的事件,以便在适当的时候执行对事件的操作。

1)创建一个CEvent类的对象:CEvent threadStart;它默认处在未通信状态;

2)threadStart.SetEvent();使其处于通信状态;

3)调用WaitForSingleObject()来监视CEvent对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值