linux编程 新建一个进程的方法
学习到一种,直接调用系统函数,在类的构造函数中直接启动一个线程,例如,某个类是用来监听串口的,可以直接在其构造函数中调用系统函数,开辟一个进程,在该进程对应的函数中不断while(1){....}
how to cancel a thread:
for example:
#include<stdio.h>
#include<pthread.h>
class CTcp
{
public:
CTcp();
static void* CTcpThreadFuncWrapper(void*param)
{
CTcp* ptr = (Ctcp*)param;
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED,NULL);
ptr->TcpThreadRun();
return 0;
}
private:
pthread_t TcpThread;
bool TcpThread_alive;
void TcpThreadRun();
void TcpThreadCancel();
};
cpp filile:
CTcp::CTcp()
{
….......
//start newthread in construct func, of course, you can write another func
//to startthrea.
pthread_attr_tattr;
pthread_attr_init(&attr);
pthread_attr_setstacksize(&attr,65536);
//pthread_create是类Unix操作系统(Unix、Linux、Mac OS X等)的创建线程的函数。它的功能是//创建线程(实际上就是确定调用该线程函数的入口点),在线程创建以后,就开始运行相关的线程函数。
//pthread_create的返回值表示成功,返回0;表示出错,返回表示-1。
if(pthread_create(&TcpThread,&attr,CTcp::CTcpThreadFuncWrapper,this))
{
TcpThread_alive=false;
}
else{
TcpThread_alive=true;
}
pthread_attr_destroy(&attr);
}
voidCTcp::TcpThreadRun()
{
while(1)
{
…......
usleep(20000);
}
}
voidCTcp::TcpThreadCancel()
{
if(TcpThread_alive==true)
{
interr=0;
err=pthread_cancel(m_pthread);
if(0==err)//canclesuccessfully
{
m_history_path_thread_alive=false;
}
else{
if(err==3)//Nosuchprocess
{
m_history_path_thread_alive=false;
}
}
}
}
https://www.cnblogs.com/lijunamneg/archive/2013/01/25/2877211.html