当前文章: 首页 >> 编程开发 >> Qt >> boost::threadpool的test测试demo
«   2019年10月   »
123456
78910111213
14151617181920
21222324252627
28293031
网站分类
控制面板
您好,欢迎到访网站!
  查看权限
标签列表
最近发表

boost::threadpool的test测试demo

boost::threadpool的test测试demo

在网上搜索基于boost做的threadpool,简直都是复制!复制!复制!

想看到一个demo也没有,后来下载了源码,发现里面本来就有全部功能的例子,这里贴出来方便一下大家。

文件:  threadpool-0_2_5-src.zip\threadpool-0_2_5-src\threadpool\libs\threadpool\test\compile_all\compile_all.cpp

/*! \file
* \brief threadpool tutorial.
*
* This file contains a tutorial for the threadpool library. 
*
* Copyright (c) 2005-2006 Philipp Henkel
*
* Distributed under the Boost Software License, Version 1.0. (See
* accompanying file LICENSE_1_0.txt or copy at
* http://www.boost.org/LICENSE_1_0.txt)
*
* http://threadpool.sourceforge.net
*
*/




#include <iostream>
#include <sstream>
#include <boost/thread/mutex.hpp>
#include <boost/bind.hpp>

#include <boost/threadpool.hpp>

using namespace std;
using namespace boost::threadpool;


//
// Helpers
boost::mutex m_io_monitor;

void print(string text)
{
  boost::mutex::scoped_lock lock(m_io_monitor);
  cout << text;
}

template<typename T>
string to_string(T const & value)
{
  ostringstream ost;
  ost << value;
  ost.flush();
  return ost.str();
}



//
// An example task functions
void task_1()
{
  print("  task_1()\n");
}

void task_2()
{
  print("  task_2()\n");
}

void task_3()
{
  print("  task_3()\n");
}

int task_4()
{
  print("  task_4()\n");
  return 4;
}

void task_with_parameter(int value)
{
  print("  task_with_parameter(" + to_string(value) + ")\n");
}

int loops = 0;
bool looped_task()
{
  print("  looped_task()\n");
  return ++loops < 5; 
}


int task_int()
{
  print("  task_int()\n");
  return 23;
}


void fifo_pool_test()
{
    pool tp;
    
    tp.schedule(&task_1);
    tp.schedule(boost::bind(task_with_parameter, 4));

    if(!tp.empty())
    {
      tp.clear();  // remove all tasks -> no output in this test
    }

    size_t active_threads   = tp.active();
    size_t pending_threads  = tp.pending();
    size_t total_threads    = tp.size();
    
    size_t dummy = active_threads + pending_threads + total_threads;
    dummy++;

    tp.size_controller().resize(5);
    tp.wait();
}

void lifo_pool_test()
{
    lifo_pool tp;
    tp.size_controller().resize(0);
    schedule(tp, &task_1);
    tp.size_controller().resize(10);
    tp.wait();
}

void prio_pool_test()
{
    prio_pool tp(2);
    schedule(tp, prio_task_func(1, &task_1));
    schedule(tp, prio_task_func(10,&task_2));
}


void future_test()
{
    fifo_pool tp(5);
    future<int> fut = schedule(tp, &task_4);
    int res = fut();
}


int main (int , char * const []) 
{
  fifo_pool_test();
  lifo_pool_test();
  prio_pool_test();
  future_test();
  return 0;
}


声明:本站原创文章,转载、复制、使用等请注明出处。
标题boost::threadpool的test测试demo
作者jues
地址: http://blog.jues.org.cn/post/boostthreadpool-de-test-ce-shi-demo.html

发表评论:

Powered By Z-BlogPHP 1.5.2 Zero Powered By Z-BlogPHP © 2018 jues博客 Copyright Your WebSite.Some Rights Reserved.联系站长 Themes by jues