Advertisement

现代C++任务打包与多线程处理--使用std::packaged_task

阅读量:

需解决的问题:
单线程处理多个无关联任务时存在耗时较长的问题,而采用多线程技术将各项任务进行合理分配并并行执行,可有效提升程序的运行效率(类似于线程池机制,但本文更侧重于任务的分配策略)。

任务封装

假设存在一个任务类Task,其在初始化过程中接收用于执行的相关参数,本例中参数为n测试,任务的执行结果通过n乘以n进行表示,具体的执行逻辑由exec()函数实现,假定每个任务的处理时间需要100毫秒:

复制代码
    class Task
    {
    public:
    Task(int n)
        :m_id(n)
        , m_result(0)
    {}
    
    int getId() { return m_id; }
    int getResult() { return m_result; }
    // 任务执行
    void exec()
    {
        // 假设每个任务需要100毫秒
        this_thread::sleep_for(std::chrono::milliseconds(100));
        cout << m_id << " ";
        // 测试假设将n*n作为每个任务的执行结果
        m_result = m_id * m_i

全部评论 (0)

还没有任何评论哟~