zhtread c++多线程库的使用2

按照c++ think上面的说明继续看看

写个代码如下:
编程环境(vc 7.1)
  1. #include <zthread/runnable.h>
  2. #include <zthread/ThreadedExecutor.h>
  3. #include <iostream>
  4. #pragma comment(lib,"ZThread_Z.lib")

  5. class thread : public ZThread::Runnable
  6. {
  7. public:
  8.     thread(int _id): id(_id){}
  9.     ~thread(){}
  10.     void run()
  11.     {
  12.          int i =0 ;
  13.          while(i++<100)
  14.         {
  15.               printf("i am thread: %d ./n", id);
  16.               _sleep(1200);
  17.         }
  18.     }
  19. private:
  20.     int id; 
  21. };

  22. int _tmain(int argc, _TCHAR* argv[])
  23. {
  24.       try
  25.       {
  26.            ZThread::ThreadedExecutor exetor;
  27.            for(int i=0;i<10;i++)
  28.                exetor.execute(new thread(i));
  29.            printf("start /n");
  30.       }
  31.       catch(ZThread::Synchronization_Exception& e)
  32.       {
  33.             printf("%s",e.what());
  34.       }

  35.       _sleep(20000);
  36.       return 0;
  37. }



这是使用解释器的例子 。他就是使用一个线程管理器来管理所有的线程
ZThread::ThreadedExecutor为每个任务创建一个线程。
注意 Thread还有 cancel();interrupt(),isCanceled();这些成员函数

由于使用 ZThread::ThreadedExecutor会导致过多的开销,所以引入了 PoolExecutor的概念
线程池是一次分配所有线程的 感觉这个很有用的啊

如下:
#include <zthread/runnable.h>
#include <zthread/PoolExecutor.h>
#include <iostream>
#pragma comment(lib,"ZThread_Z.lib")

class thread : public ZThread::Runnable
{
public:
    thread(int _id): id(_id){}
    ~thread(){}
    void run()
    {
         int i =0 ;
         while(i++<100)
        {
              printf("i am thread: %d ./n", id);
              //_sleep(1200);
        }
    }
private:
    int id;
};

int _tmain(int argc, _TCHAR* argv[])
{
      try
      {
          ZThread::PoolExecutor exetor(10);
           for(int i=0;i<10;i++)
          {
               exetor.execute(new thread(i));
               exetor.interrupt();
          }
         
           printf("start /n");
      }
      catch(ZThread::Synchronization_Exception& e)
      {
            printf("%s",e.what());
      }

      _sleep(20000);
      return 0;
}

PoolExecutor没有默认的构造函数
他的成员函数和线程执行器的都一样
他使用一个线程集以并行方式执行线程

下一个就是ConcurrentExecutor
代码如下:

#include <zthread/runnable.h>
#include <zthread/ConcurrentExecutor.h>
#include <iostream>
#pragma comment(lib,"ZThread_Z.lib")

class thread : public ZThread::Runnable
{
public:
    thread(int _id): id(_id){}
    ~thread(){}
    void run()
    {
         int i =0 ;
         while(i++<100)
        {
              printf("i am thread: %d ./n", id);
              //_sleep(1200);
        }
    }
private:
    int id;
};

int _tmain(int argc, _TCHAR* argv[])
{
      try
      {
          ZThread::ConcurrentExecutor exetor;
           for(int i=0;i<10;i++)
          {
               exetor.execute(new thread(i));
               exetor.interrupt();
          }
         
           printf("start /n");
      }
      catch(ZThread::Synchronization_Exception& e)
      {
            printf("%s",e.what());
      }

      _sleep(20000);
      return 0;
}

观察到的和这个执行器的含义一样 是以串行化的次序提交任务的

再来看一下 SynchronousExecutor
该执行器保证每时每刻只有一个线程在运行

最后看一下让步的代码实现


// zthread.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <zthread/runnable.h>
#include <zthread/ThreadedExecutor.h>
#include <iostream>
#pragma comment(lib,"ZThread_Z.lib")

class thread : public ZThread::Runnable
{
public:
    thread(int _id): id(_id){}
    ~thread(){}
    void run()
    {
         int i =0 ;
         while(i++<100)
        {
              printf("i am thread: %d ./n", id); 
              //_sleep(1200);
        }
       ZThread::Thread::yield();
    }
private:
    int id;
};

int _tmain(int argc, _TCHAR* argv[])
{
      try
      {
          ZThread::ThreadedExecutor exetor;
           for(int i=0;i<10;i++)
          {
               exetor.execute(new thread(i));
               exetor.interrupt();
          }
         
           printf("start /n");
      }
      catch(ZThread::Synchronization_Exception& e)
      {
            printf("%s",e.what());
      }

      _sleep(20000);
      return 0;
}


使用让步的原则就是保证线程在做完之后告诉其他线程  自己做完了

在24号前弄完所有的zthread库
-_-!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值