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;

            }

        }

    }

}

ref:

https://www.cnblogs.com/lijunamneg/archive/2013/01/25/2877211.html

 


posted @ 2018-06-13 19:39  JadeCicada  阅读(183)  评论(0编辑  收藏  举报