现代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)
还没有任何评论哟~
