C语言任务调度框架,poco框架库:任务调度task

poco的任务模块,已经独立出来,其实就是多线程和一个具体应用,把线程处理任务的进度,能上报出来,具体分析如下:

task主要应用在GUI和Seerver程序中,用于追踪后台线程的进度。

应用Poco任务时,需要类Poco::Task和类Poco::TaskManager配合使用。其中类Poco::Task继承自

Poco::Runnable,它提供了接口可以便利的报告线程进度。Poco::TaskManager则对Poco::Task进行管理。

为了完成取消和上报线程进度的工作:

a. 使用者必须从Poco::Task创建一个子类并重写runTask()函数

b. 为了完成进度上报的功能,在子类的runTask()函数中,必须周期的调用setProgress()函数去上报信息

c. 为了能够在任务运行时终止任务,必须在子类的runTask()函数中,周期性的调用isCancelled()或者sleep()函数,去检查是否有任务停止请求

d. 如果isCancelled()或者sleep()返回真,runTask()返回。

Poco::TaskManager通过使用Poco::NotificationCenter 去通知所有需要接受任务消息的对象

从上面描述可以看出,Poco中Task的功能就是能够自动汇报线程运行进度。调试案例如下#include "Poco/Observer.h"

#include 

using Poco::Observer;

using namespace std;

class SampleTask: public Poco::Task

{

public:

SampleTask(const std::string& name): Task(name)

{}

void runTask()

{

for (int i = 0; i 

{

setProgress(float(i)/100); // report progress

if (sleep(1000))

break;

}

}

};

class ProgressHandler

{

public:

void onProgress(Poco::TaskProgressNotification* pNf)

{

cout <task()->name()

<progress() <

pNf->release();

}

void onFinished(Poco::TaskFinishedNotification* pNf)

{

cout <task()->name() <

pNf->release();

}

};

int main(int argc, char** argv)

{

Poco::TaskManager tm;

ProgressHandler pm;

tm.addObserver(

Observer

(pm, &ProgressHandler::onProgress)

);

tm.addObserver(

Observer

(pm, &ProgressHandler::onFinished)

);

tm.start(new SampleTask("Task 1")); // tm takes ownership

tm.start(new SampleTask("Task 2"));

tm.start(new SampleTask("Task3"));

tm.joinAll();

return 0;

}

这个例子会实时打出3个任务的进度,直到所有任务完成.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值