linux 多线程类
来源:互联网 发布:windows更新过程中关闭 编辑:程序博客网 时间:2024/05/29 08:02
#define THREAD_H
#include <sys/types.h>
#include <pthread.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
class Thread
{
public:
Thread();
virtual ~Thread();
public:
int start();
int join(void **ptr = NULL);
int detach();
void pause();
void continues();
pthread_t getpid();
protected:
virtual void run() = 0;
private:
void maskSIGUSR1();
static void *process(void *data);
private:
pthread_t m_pid;
//信号
sigset_t m_wait_signal;
};
#endif // THREAD_H
////////////////////////////////////////////////////////////////////////////////
#include "thread.h"
Thread::Thread()
{
m_pid = 0;
maskSIGUSR1();
// 定义SIGUSR1信号阻塞
sigemptyset(&m_wait_signal);
sigaddset(&m_wait_signal, SIGUSR1);
}
Thread::~Thread()
{
m_pid = 0;
}
int Thread::start()
{
int nRet = pthread_create(&m_pid, NULL, process, (void*)this);
if (nRet < 0)
{
perror("create thread");
return -1;
}
return 0;
}
int Thread::join(void **ptr)
{
int nRet = pthread_join(m_pid, ptr);
if (nRet < 0)
{
perror("pthread_join");
return -1;
}
return 0;
}
int Thread::detach()
{
int nRet = pthread_detach(m_pid);
if (nRet < 0)
{
perror("pthread_detach");
return -1;
}
return 0;
}
void Thread::pause()
{
int sig;
sigwait(&m_wait_signal , &sig);
}
void Thread::continues()
{
pthread_kill(m_pid , SIGUSR1);
}
pthread_t Thread::getpid()
{
return m_pid;
}
void Thread::maskSIGUSR1()
{
sigset_t sig;
sigemptyset(&sig);
sigaddset(&sig , SIGUSR1);
pthread_sigmask(SIG_BLOCK , &sig , NULL);
}
void *Thread::process(void *data)
{
Thread *pThread = (Thread*)data;
pThread->run();
}
- linux 多线程类
- linux多线程
- linux多线程
- Linux多线程
- linux多线程
- linux多线程
- linux多线程~
- LINUX多线程
- linux多线程
- Linux多线程
- linux多线程
- linux多线程
- linux多线程
- linux多线程
- linux 多线程
- Linux多线程
- linux 多线程
- Linux多线程
- 88. 最值问题
- 幸福,是相公给了婆娘被关爱的
- NYOJ 36 最长公共子序列
- sql参数数组,及调用。SqlParameter[] Parameters
- uva1401 - Remember the Word 前缀树DP
- linux 多线程类
- 拓胜第八十六天~第九十二天
- 线程池
- oracle提示TNS:无监听程序的解决办法
- shell排序(C++实例)
- QT OSG 浏览器插件 ,将OSG嵌入到IE中
- linq 基础
- “这圣域强者的领域当真可怕
- 引领世界企业通讯革命——AVAYA IP Office 云计划