很多时候, 我们想把一项操作放入后台线程去执行, 可能是为了提高操作体验(UI表现的流畅), 或者是性能(充分利用多核的计算能力)等
为了方便, 我在这里先定义一个简化的线程模型:
- 所有的操作都定义为命令(Command)
- 后台线程监听一个命令队列, 如果有命令就执行, 没有就等待
- 如果收到结束通知, 则结束该线程
比如我们有两种操作:
void PrintA()
{
printf("thread[%x]: aaa\n", this_thread::get_id().hash());
}
void PrintB()
{
printf("thread[%x]: bbb\n", this_thread::get_id().hash());
}
这两种操作会在后台线程去执行, 用代码表示如下:
enum CommandType
{
CommandA,
CommandB
};
atomic_int8_t IsOver = 0;
concurrent_queue<CommandType> CommandQueue;
void SendCommand(CommandType cmd)
{
CommandQueue.push(cmd);
}
atomic_int8_t IsOver = 0;
concurrent_queue<CommandType> CommandQueue;
void CommandThreadProc()
{
printf("thread[%x]: start\n", this_thread::get_id().hash());
chrono::seconds time(1);
CommandType command;
w