/*************************************************************************
> File Name: ThreadBody.h
> Author: wangzhicheng
> Mail: 2363702560@qq.com
> Created Time: 2017-01-06
> Brief: abstract thread body
************************************************************************/
#ifndef THREAD_BODY_H
#define THREAD_BODY_H
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
namespace threadbody
{
using namespace std;
/*
* brief abstract thread class
* */
class ThreadBody
{
public:
virtual void do_it() = 0; // the real function which thread need to execute
};
}
#endif
/*************************************************************************
> File Name: main.cpp
> Author: wangzhicheng
> Mail: 2363702560@qq.com
> Created Time: Fri 06 Jan 2017 09:36:39 PM AWST
************************************************************************/
#include <iostream>
#include <string>
#include <vector>
#include <thread>
#include <functional>
#include "ThreadBody.h"
using namespace threadbody;
class ShowStr:public ThreadBody
{
public:
ShowStr(const string &_str):str(_str)
{
}
void do_it()
{
cout << str << endl;
}
private:
string str;
};
class Processor
{
private:
int m_nThreadNum;
ThreadBody *m_pThreadBody;
vector<thread>m_ths;
public:
Processor(ThreadBody *p, int num = 2)
{
m_pThreadBody = p;
m_nThreadNum = num;
for(int i = 0;i < m_nThreadNum;i++)
{
m_ths.emplace_back(thread(bind(&ThreadBody::do_it, m_pThreadBody)));
}
}
~Processor()
{
for(auto &th:m_ths)
{
if(th.joinable()) th.join();
}
}
};
int main()
{
ShowStr ss("Hello World...!");
Processor processor(&ss);
// thread th(bind(&ThreadBody::do_it, &ss));
// th.join();
return 0;
}
CC=g++
all:
$(CC) -std=c++11 -g -o TestThread main.cpp ThreadBody.h -pthread -lpthread
Test thread
最新推荐文章于 2022-03-18 12:06:09 发布