線程清理和退出注意事項

我們在寫線程的時候,多數都是while(1)的死循環;

此時要注意一下幾點:

1)在死循環中,執行完一輪操作後,要sleep一下,釋放cpu

2)一般會在函數中使用標誌位來退出線程,退出死循環


void exitfunction(int flag)
{
    if(flag == SIGTERM || flag == SIGQUIT || flag == SIGABRT)
    {
        qDebug() << "flag= << flag;
        iExitFlag = 1;
        qDebug() << "Exit!";
        sleep(3); // 等待線程結束
        exit(EXIT_SUCCESS);
    }
}

int main()
{
     if(signal(SIGABRT, exitfunction) < 0 ||
            signal(SIGTERM, exitfunction) < 0 ||
            signal(SIGQUIT, exitfunction) < 0 )
    {
        qDebug() << "signal";
        exit(EXIT_FAILURE);
    }
}
void* pthread_fun(void *arg)
{
    //do sth.
    while(1)
    {
        if(iExitFlag==1)
        {
        //do sth.
        //比如,close fd;
        // free(pt);
        //return;        //退出線程,退出死循環
        //pthread_exit(0);
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章