#pragma once
#include<pthread.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
class CThread
{
public:
int Start();
void Stop();
void Run();
static void* ThreadProc(void* param);
static void* ThreadProc_1(void* pParam);
static void* ThreadProc_2(void* pParam);
static void* ThreadProc_3(void* pParam);
static void* ThreadProc_4(void* pParam);
pthread_t GetThreadId()
{
return m_pid;
}
private:
pthread_t m_pid;
};
#include"thread.h"
int a = 20;
int CThread::Start()
{
return pthread_create(&m_pid, NULL, ThreadProc_4,this);
}
void* CThread::ThreadProc(void* pParam)
{
CThread* pThread = (CThread*)pParam;
pThread->Run();
int a = 10;
int* p = &a;
cout << "I am new thread" << endl;
return (void*)p;
}
void* CThread::ThreadProc_1(void* pParam)
{
int a = 10;
int* p = &a;
cout << "I am new thread" << endl;
return (void*)p;
}
void* CThread::ThreadProc_2(void* pParam)
{
int a = 10;
int* p = &a;
int count = 0;
while (1)
{
++count;
if (count > 5)
{
pthread_exit(p);
}
cout << "I am new thread" << endl;
sleep(1);
}
}
void* CThread::ThreadProc_3(void* pParam)
{
int a = 10;
int* p = (int*) malloc(sizeof(int));
*p = 10;
int count = 0;
while (1)
{
++count;
if (count > 5)
{
pthread_exit(p);
}
cout << "I am new thread" << endl;
sleep(1);
}
}
void* CThread::ThreadProc_4(void* pParam)
{
int* p = &a;
int count = 0;
while (1)
{
++count;
if (count > 5)
{
pthread_exit(p);
}
cout << "I am new thread" << endl;
sleep(1);
}
}
void CThread::Run()
{
while (1)
{
cout << "I am new thread: " << pthread_self() << endl;
sleep(1);
}
}
void CThread::Stop()
{
cout << "Thread: " << m_pid << " Exit"<<endl;
void* ret;
pthread_cancel(m_pid);
pthread_join(m_pid,&ret);
if (ret == PTHREAD_CANCELED)
{
cout << "thread is return,thread id: " << m_pid << " return code:PTHREAD_CANCELED\n" << endl;
}
else
cout << "thread is return,thread id: " << m_pid << "return code:NULL\n"<<endl;
}
#include"thread.h"
int main()
{
CThread cThread;
if (0 == cThread.Start())
{
cout << "Thread Start" << endl;
}
pthread_t tid;
void* ret;
tid = cThread.GetThreadId();
cout << pthread_join(tid, &ret);
cout << "return value: " << *((int*)ret) << endl;
return 0;
}