为了不阻塞主线程,将主线程发过来的命令处理为不同的事件,放到另一个线程去执行,包括同步和异步处理。
注:同一个进程,多线程。
为了保证线程间的共享资源保护以及线程间的消息机制,用到了下面几个系统库资源:
std::mutex
std::unique_lock
std::conditional_variable
1、消息 结构体 和 事件
enum Op
{
EVENT_A = 0,
EVENT_B,
EVENT_C,
};
//最重要的是operation和isSyncCmd, 其它的都是传参,选填。
struct Command
{
Op operation;
int32_t arg;
long larg;
const void* parg;
bool barg;
std::string str;
bool isSyncCmd; //是否是同步事件
};
2、添加消息
void postCommand(const Command& cmd)
{
std::unique_lock<std::mutex> lock(mLock);
mCommandQueue.push(cmd);
mWakeSignal.notify_all(); //唤醒处理事件的线程