多线程调用的封装技巧

本文介绍了如何实现多线程调用的封装,通过定义命令(Command)模型,后台线程持续监听命令队列,当有新的命令时执行,没有则等待。同时,线程在接收到结束通知后会自动终止,提供了一种有效的线程管理方式。
摘要由CSDN通过智能技术生成

很多时候, 我们想把一项操作放入后台线程去执行, 可能是为了提高操作体验(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
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值