cthread.cpp

来自「sun Linux 下的网络编程」· C++ 代码 · 共 88 行

CPP
88
字号
   /*******************************************************************
   *	cThread.cpp
   *    DESCRIPTION:线程类的实现
   *
   *    AUTHOR:yyc
   *
   *    HISTORY:
   *
   *    DATE:2002-8-26
   *
   *******************************************************************/
   
#include "cThread.h"

#include <csignal>

using namespace yyc;

void *cThread::threadfunc(void *p)
{
	cThread *pthread=(cThread *)p;
	int ret=(*(pthread->m_pFunc))(pthread->m_pArgs);
	pthread->m_thrid=0;
	pthread_M_EXIT(NULL);
	return NULL;//no use
}

cThread::cThread()
{
	m_thrid=0;
	m_pArgs=NULL;
	m_pFunc=NULL;
}
cThread::cThread(FUNC_THREAD *pfunc)
{
	m_thrid=0;
	m_pArgs=NULL;
	m_pFunc=pfunc;
}

cThread::~cThread()
{
	detach();
}

bool cThread::operator==(const cThread& other) const
{
	return other.m_thrid==m_thrid;
}

bool cThread::operator!=(const cThread& other) const
{
    return !operator==(other);
}
//分离线程,不等待其结束
int cThread::detach()
{
	if(m_thrid!=0)
		pthread_M_DETACH(m_thrid);
	m_thrid=0;
	return 0;
}

//启动线程 0-OK 
int cThread::start(void * pArgs)
{
	int retv=0;
	if(m_thrid!=0) return 0;
	if(m_pFunc!=NULL)
	{
		m_pArgs=pArgs;
		pthread_M_CREATE(&retv,&m_thrid,threadfunc,(void *)this);
	}
	return retv;
}
//等待线程结束 0-OK
int cThread::join()
{
	int retv=0;
	pthread_t pid=m_thrid;
	if(pid!=0)
	{
		pthread_M_KILL(pid,SIGALRM);
		pthread_M_JOIN(pid,NULL);
	}
	return retv;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?