/*************************************************************************
> File Name: ThreadGuard.h
> Author: wangzhicheng
> Mail: 2363702560@qq.com
> Created Time: Mon 02 Jan 2017 02:22:09 PM AWST
************************************************************************/
#ifndef THREAD_GUARD_H
#define THREAD_GUARD_H
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <iostream>
#include <thread>
namespace threadguard
{
using namespace std;
class ThreadGuard
{
private:
thread &m_thread;
public:
ThreadGuard(thread &);
~ThreadGuard();
ThreadGuard(const ThreadGuard &) = delete;
ThreadGuard & operator = (const ThreadGuard &) = delete;
};
}
#endif
/*************************************************************************
> File Name: ThreadGuard.h
> Author: wangzhicheng
> Mail: 2363702560@qq.com
> Created Time: Mon 02 Jan 2017 02:22:09 PM AWST
************************************************************************/
#include "ThreadGuard.h"
namespace threadguard
{
ThreadGuard::ThreadGuard(thread &t):m_thread(t)
{
}
ThreadGuard::~ThreadGuard()
{
if(m_thread.joinable())
{
m_thread.join();
}
}
}
/*************************************************************************
> File Name: main.cpp
> Author: wangzhicheng
> Mail: 2363702560@qq.com
> Created Time: Mon 02 Jan 2017 02:26:39 PM AWST
************************************************************************/
#include "ThreadGuard.h"
using namespace threadguard;
class SelfException
{
public:
SelfException()
{
cout << "a self defined exception occurs...!" << endl;
}
};
void func()
{
cout << "hello world...!" << endl;
}
int main()
{
thread t(func);
ThreadGuard tg(t);
try
{
throw SelfException();
}
catch(...)
{
}
return 0;
}
CC=g++
all:
$(CC) -std=c++11 -g -o ThreadGuard main.cpp ThreadGuard.h ThreadGuard.cpp -pthread -lpthread
ThreadGuard
最新推荐文章于 2023-09-29 12:16:49 发布