利用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再抛给调用线程,这个过程是透明的