www.pudn.com > MyLinuxThread.rar > Thread.cpp, change:2007-05-17,size:845b


#include "Thread.h"
#include "Log.h"

G_Thread::G_Thread()
{
	maskSIGUSR1();

	// 定义SIGUSR1信号阻塞
	sigemptyset(&g_waitSig);
	sigaddset(&g_waitSig, SIGUSR1);
}

G_Thread::~G_Thread()
{
}

void G_Thread::maskSIGUSR1()
{
	sigset_t sig;
	sigemptyset(&sig);
	sigaddset(&sig , SIGUSR1);
	pthread_sigmask(SIG_BLOCK , &sig , NULL);
}


pthread_t G_Thread::getThreadId()
{
	return g_pid;
}


void *G_Thread::threadFun(void *arg)
{
	G_Thread *pThread = (G_Thread*)arg;
	pThread->Run();
}

bool G_Thread::Start()
{
	int nRet = pthread_create(&g_pid , NULL , threadFun , this);
	if(0 == nRet)
	{
		nRet = pthread_detach(g_pid);
		if(nRet == 0)
		{
			return true;
		}
	}
	else
	{
		return false;
	}

	return true;
}

void G_Thread::pause()
{
	int sig;
	sigwait(&g_waitSig , &sig);
}

void G_Thread::continues()
{
	pthread_kill(g_pid , SIGUSR1);
}