postmessage 实现 task 线程 switch

利用postmessage实现一个跨线程的task运行机制,  sendmessage也可以跨线程,但是用这个会卡死发起的线程,因为是同步的,会被骂。。。。


一个UI线程创建一个msg hwnd: m_mainThreadHwnd


再起一个线程m_taskmgrThread,创建一个taskmgr,实质也是一个msg hwnd:m_taskmgrHwnd,这个taskmgr里面实现一个消息推动的loop,loop里面跑task


创建一个task类,这个task类的初始化方法init()就是去线程池取一个空闲线程,或者自己起线程m_taskThread,此线程的执行proc是该task的run方法,所以当run方法执行时就切换到了另外一个线程m_taskThread


UI层通过postmessage(task做msg lparm或wparm的参数)向m_taskmgrHwnd窗口抛消息,实质是将线程运行切换到了m_taskmgrThread,  此时taskmgr里面再运行task的init()将task的run方法跑在了m_taskThread中


该方法过分利用windows,用chromium里面的task机制更好,待补充


note:chromium里面有一点不好,就是task里面没有封装回调task,当task完成后通知taskmgr已经完成此task时,应该取这个task里面的回调task再抛给调用线程,此时逻辑就清楚了,因为对于调用者来讲:当task完成后通知taskmgr已经完成此task时,应该取这个task里面的回调task再抛给调用线程,这个过程是透明的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值