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文件分析
随机推荐
- 杭电1002-A + B Problem II
#include<stdio.h>#include<string.h> int main(){ char str1[1001],str2[1001]; int t, ...
- 【转】学习总结--Cookie & Session总结
转载地址:http://www.phperzone.cn/portal.php?aid=718&mod=view 一.状态管理 1)什么是状态管理? 将浏览器与web服务器之间多次交互过程 ...
- The shortest problem
The shortest problem Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- Linux vim的安装和配置:
1:首先就碰到一个问题 程序 'vim' 已包含在下列软件包中: * vim * vim-gnome * vim-tiny * vim-athena * vim-gtk * vim-nox 请尝试:s ...
- uwsgi安装过程中遇到的问题
参考这篇文章: [root@crz_oa webserver]# uwsgi --http :9090 --wsgi-file home.py --daemonize /var/log/uwsgi.l ...
- MySQL 数据库发展历程及缺点
传统关系数据库的瓶颈 传统的关系数据库具有不错的性能,高稳定型,久经历史考验,而且使用简单,功能强大,同时也积累了大量的成功案例.在互联网领域,MySQL成为了绝对靠前的王者,毫不夸张的说,MySQL ...
- SQL生成规则数
--------------------------开始----------------------------开始值DECLARE @start INT = 1--结束值DECLARE @end I ...
- ViewState
ViewState就像一个记录本,由于WebFormd的无状态性,刷新了页面.那么这个页面就和上一个页面没有任何关系了.为了使刷新前的页面和本页面产生联系,ViewState的作用就是记录刷新前页面的 ...
- EF 增删改查
StudentEntities entities = new StudentEntities(); //初始化对象 Register register = new Register(); #regio ...
- C89标准库函数手册(待整理)
http://zh.cppreference.com/w/c 前言 ANSI C(C89)标准库函数共有15个头文件.这15个头文件分别为: 1.<assert.h> ...