本文主要整理了网上见到的,以及自己编写的有关隘poco的例子,本着开源共享的精神,供大家参考,加快poco框架库的学习和使用,加快自己在项目上的应用,加速产品的设计与开发.

 例子一: 传入对象

    在Poco中,将入口函数抽象为一个类Runnable,该类提供void run()接口,用户需要继承至该类来实现自定义的入口函数。Poco将线程也抽象为一个类Thread,提供了start, join等方法,如下:

 定义一个Thread对象,调用其start方法并传入一个Runnable对象来启动线程,使用的方法比较简单

#include "Poco/Thread.h"#include "Poco/Runnable.h"#include 
class HelloRunnable: public Poco::Runnable{    virtual void run()    {        std::cout << "Hello, world!" << std::endl;    }};int main(int argc, char** argv){    HelloRunnable runnable;    Poco::Thread thread;    thread.start(runnable);//传入对象而不是对象指针    thread.join();}

例子二:传入一个定义好的类中的函数

如果你的线程的入口函数在另一个已定义好的类中,那么Poco提供了一个适配器来使线程能够从你指定的入口启动,并且无需修改已有的类:

#include "Poco/Thread.h"#include "Poco/RunnableAdapter.h"#include 
class Greeter{public:    void greet()   {       std::cout << "Hello, world!" << std::endl;   }};int main(int argc, char** argv){    Greeter greeter;    Poco::RunnableAdapter
 runnable(greeter, &Greeter::greet);    Poco::Thread thread;    thread.start(runnable);    thread.join();//等待该线程技术    return 0;}

例子三:直接传入函数和参数

Thread::start除了接收Runnable对象之外,还可以传入函数和参数

#include 
#include "Poco/Thread.h"#include "Poco/ThreadLocal.h"#include "Poco/Runnable.h" using namespace std; using namespace Poco;void sayHello(void* name){    cout<<"Hello "<<(char*)name<

例子四:线程局部变量存储

    ThreadLocal类为开发者提供了更为简洁的TLS机制使用方法,TLS机制用来保存这样一些变量:它们在不同的线程里有不同的值,并且各自维护,线程不能访问其他线程中的这些变量。

    在一个线程修改的内存内容,对所有线程都生效。这是一个优点也是一个缺点。说它是优点,线程的数据交换变得非常快捷。说它是缺点,一个线程死掉了,其它线程也性命不保; 多个线程访问共享数据,需要昂贵的同步开销,也容易造成同步相关的BUG。

   如果需要在一个内部的各个都能访问、但其它线程不能访问的(被称为static memory local to a thread 线程局部),就需要新的机制来实现。这就是。

#include "Poco/Thread.h"#include "Poco/Runnable.h"#include "Poco/ThreadLocal.h"#include 
class Counter: public Poco::Runnable{    void run()   {        static Poco::ThreadLocal
 tls;        for (*tls = 0; *tls < 10; ++(*tls))        {            std::cout << *tls << std::endl;        }    }};int main(int argc, char** argv){    Counter counter;    Poco::Thread t1;    Poco::Thread t2;    t1.start(counter);    t2.start(counter);    t1.join();    t2.join();    return 0;}

例子五:综合性例子

#include 
#include "Poco/Thread.h"#include "Poco/Runnable.h"#include "Poco/ThreadTarget.h"#include "Poco/RunnableAdapter.h"using namespace std ;using Poco::Thread;using Poco::Runnable;using Poco::ThreadTarget;using Poco::RunnableAdapter;//传入对象class MyRunnable:public Runnable{public:    void run() { std::cout << "hello MyRunnable." << std::endl; }};//传入函数void gFun4Td(){    std::cout << "hello gFun4Td" << std::endl;}//直接传入类中的函数class staticFun4Td{public:    static void staticFun() { std::cout << "hello static fun." << std::endl; }};class commFun4Td{public:    void commFun() { std::cout << "hello common function." << std::endl; }};int main(){    Thread t1("MyRun");    Thread t2("global");    Thread t3("static");    Thread t4("comm");    MyRunnable rMy;    ThreadTarget rg(gFun4Td);    ThreadTarget rs(&staticFun4Td::staticFun);    commFun4Td com;    RunnableAdapter
 rc(com,&commFun4Td::commFun);    t1.start(rMy);    Thread::sleep(100);    t2.start(rg);    Thread::sleep(100);    t3.start(rs);    Thread::sleep(100);    t4.start(rc);    t1.join();    t2.join();    t3.join();    t4.join();    return 0;}