【caffe】线程封装类

test.hpp

#ifndef __INTERNAL_THREAD_HPP__
#define __INTERNAL_THREAD_HPP__

#include <boost/thread.hpp>
#include <boost/shared_ptr.hpp>

using boost::shared_ptr;
namespace boost { class thread; }

class InternalThread
{
public:
	InternalThread() : thread_()
	{
	}
	virtual ~InternalThread();

	void StartInternalThread();

	void StopInternalThread();

	bool is_started() const;

protected:
	virtual void InternalThreadEntry();

	bool must_stop();

private:
	void entry();

	shared_ptr<boost::thread> thread_;
	
};

#endif

test.cpp

#include <boost/thread.hpp>
#include <boost/shared_ptr.hpp>
#include <exception>
#include <iostream>
#include <sys/types.h>
#include "my_thread.hpp"


/* 析构函数,终止线程 */
InternalThread::~InternalThread()
{
	StopInternalThread();
}

/* 线程是否启动,是返回true */
bool InternalThread::is_started() const
{
	return thread_ && thread_->joinable();
}

/* 线程是否要关闭,是返回true */
bool InternalThread::must_stop()
{
	/* 检测线程是否收到中断请求 */
	return thread_ && thread_->interruption_requested();
}

/* 启动线程 */
void InternalThread::StartInternalThread()
{
	/* 线程已启动,打印提示 */
	if(is_started())
	{
		std::cout << "Threads should persist and not be restarted.";
	}

	try
	{
		/* 创建线程 */
		thread_.reset(new boost::thread(&InternalThread::entry, this));
	}
	catch (std::exception& e)
	{
		std::cout << "Thread exception: " << e.what();
	}
}

void InternalThread::InternalThreadEntry()
{
	std::cout << thread_->native_handle()<< std::endl;
	std::cout << thread_->get_id()<< std::endl;
	int i = 0;
	//while (!must_stop())
	while(1)
	{
		i++;
		sleep(1);
		std::cout << "i = " << i << std::endl;
	}
}

/* 线程处理单元 */
void InternalThread::entry()
{
	InternalThreadEntry();
}

/* 终止线程 */
void InternalThread::StopInternalThread()
{
	if (is_started())
	{
		/* 发送中断请求 */
		thread_->interrupt();
		
		try
		{
			/* 等待线程执行结束 */
			thread_->join();
		}
		catch (boost::thread_interrupted&)
		{
		}
		catch (std::exception& e)
		{
			std::cout << "Thread exception: " << e.what();
		}
	}
}



int main()
{
	InternalThread testThread;
	testThread.StartInternalThread();
	std::cout << "hello world" << std::endl;
	return 0;
}

需要先安装boost库,再编译:g++ test.cpp -lboost_system -lboost_thread

猜你喜欢

转载自blog.csdn.net/piaopiaopiaopiaopiao/article/details/86520299