线程清理和退出注意事项

我们在写线程的时候,多数都是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);
        }
    }
}

 

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