POCO C++库学习和分析——任务
1、任务的定义
任务虽然在Poco::Foundation库的目录中被单独划出来,其实可以被看成线程的应用,放在线程章节。首先来看一下Poco中对任务的描述:
*task主要应用在GUI和Sever程序中,用于追踪后台线程的进度。
*应用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的功能就是能够自动汇报线程的运行进度。
2、任务用例
#include <iostream>
#include "Poco/Task.h"
#include "Poco/TaskManager.h"
#include "Poco/TaskNotification.h"
#include "Poco/Observer.h"
#include <string> class TaskExample:public Poco::Task{
public:
TaskExample(const std::string name):Poco::Task(name){}
void runTask(){ for (int i = ; i <= ; i ++) {
setProgress(float(i)/);
if (sleep()) {
break;
}
}
}
};
class ProgressHandler{
public:
void onProgress(Poco::TaskProgressNotification * pNf){
std::cout << pNf->task()->name() << " progress:";
std::cout << pNf->progress()* << "%" << std::endl;
pNf->release();
}
void onFinished(Poco::TaskFinishedNotification * pNf){
std::cout << pNf->task()->name() << " finished.\n";
pNf->release();
}
};
int main(int argc, char** argv)
{
Poco::TaskManager tm;
ProgressHandler pm;
tm.addObserver(Poco::Observer<ProgressHandler, Poco::TaskProgressNotification>
(pm,&ProgressHandler::onProgress)
);
tm.addObserver(Poco::Observer<ProgressHandler, Poco::TaskFinishedNotification>
(pm,&ProgressHandler::onFinished)
);
tm.start(new TaskExample("Task1"));
tm.start(new TaskExample("Task2"));
tm.joinAll();
return ;
}
(版权所有,本文转载自:http://blog.csdn.net/arau_sh/article/details/8620810)
POCO C++库学习和分析——任务的更多相关文章
- python 操作exls学习之路1-openpyxl库学习
这篇要讲到的就是如何利用Python与openpyxl结合来处理xlsx表格数据.Python处理表格的库有很多,这里的openpyxl就是其中之一,但是它是处理excel2007/2010的格式,也 ...
- linux下查看动态链接库依赖关系的命令 x86: ldd *.so arm: arm-linux-readelf -d *.so 实际例子: 以项目中用到的库librtsp.so分析: lijun@ubuntu:~/workspace$ arm-hisiv100nptl-linux-ld -d librtsp.so arm-hisiv100nptl-linux-ld:
linux下查看动态链接库依赖关系的命令 x86:ldd *.so arm:arm-linux-readelf -d *.so 实际例子:以项目中用到的库librtsp.so分析:l ...
- Libev库学习
Libev库学习 https://www.cnblogs.com/wunaozai/p/3950249.html Libev库学习(1)https://www.cnblogs.com/wunaozai ...
- dlib库学习之一
dlib库学习之一 1.介绍 跨平台 C++ 通用库 Dlib 发布 ,带来了一些新特性,包括概率 CKY 解析器,使用批量同步并行计算模型来创建应用的工具,新增两个聚合算法:中国低语 (Chines ...
- python_库学习_01
一.python的库学习之 财经数据接口包 1.安装ThShare 直接pip install tushare 可能会出现缺少依赖库的情况,依次安装,大概有lxml,pandas,bs4,reques ...
- numpy, matplotlib库学习笔记
Numpy库学习笔记: 1.array() 创建数组或者转化数组 例如,把列表转化为数组 >>>Np.array([1,2,3,4,5]) Array([1,2,3,4,5]) ...
- python爬虫解析库学习
一.xpath库使用: 1.基本规则: 2.将文件转为HTML对象: html = etree.parse('./test.html', etree.HTMLParser()) result = et ...
- 【mmall】Guava库学习Collections
参考链接 Guava库学习:学习Collections(三)Sets
- USB开发库STSW-STM32121文件分析(转)
源: USB开发库STSW-STM32121文件分析
随机推荐
- javaScript判断鼠标滚轮的上下滚动
分享一个js实现判断鼠标滚轮的上下滚动: <script type="text/javascript"> var scrollFunc = function (e) { ...
- Bag Problem
Bag Problem Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/131072 K (Java/Others) Total ...
- 山东理工大学第七届ACM校赛-飞花的线代 分类: 比赛 2015-06-26 10:29 10人阅读 评论(0) 收藏
飞花的线代 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 飞花壕的线代一直非常的壕(好),线代考试每次都是全班第一.一次,飞花壕在预习 ...
- Mybaits 之根据集合查询和逗号分隔的子查询
这是我们的mapper要根据传入一个集合进行查询: List<ExtKeywordCategory> findListByIds(List<ExtKeywordFkCategory& ...
- 2016年6月29日 星期三 --出埃及记 Exodus 14:26
2016年6月29日 星期三 --出埃及记 Exodus 14:26 Then the LORD said to Moses, "Stretch out your hand over the ...
- 3094 寻找sb4
3094 寻找sb4 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description sb有一天和sml吵架了,她 ...
- ldataset 与 list 的使用
[WebMethod(Description = @"根据时间查询会议项目[时间格式为:2014-01-01] DateTime StartTime , DateTime Endtime & ...
- TortoiseGit安装与配置
TortoiseGit 简称 tgit, 中文名海龟Git. 海龟Git只支持神器 Windows 系统, 有一个前辈海龟SVN, TortoiseSVN和TortoiseGit都是非常优秀的开源的版 ...
- VM安装失败
出现:VMware安装失败 “Failed to create the requested registry key Key:installer Error:1021" 解决: 开始--运行 ...
- Servlet&jsp基础:第一部分
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...