сбой системы Linux после выхода из игры - PullRequest
0 голосов
/ 27 марта 2011

Я запускаю свою игру на Linux-системе ТВ, когда я выхожу из игры, система вылетает.

из выходного журнала, я знаю, что моя игра была вполне, но происходит сбой системы.

основная функция, как показано ниже:

int main(int argc, char** argv)
{
 ......

 SDL_Quit();

 printf("Log: exit end. \n);// it's printed on console
 return 0;
}

Я могу найти выходной журнал о Log: exit end.Таким образом, игра была завершена, верно?

Я обнаружил, что выход из игры будет только сбой после создания потоков.

Ниже приведена функция запуска в потоке:

   while ( pThread->m_running )
    {
        string str;
        string cmdStr;

        if ( pThread->GetSendMsg(str, cmdStr) )
        {
            string returnStr = Connection::DealHttpSendMsg( str, cmdStr );

            pThread->AddReturnMsg( returnStr ); 

            haveData = true;
        }
        else
        {
            SDL_Delay(100);

            haveData = false;
        }
    }

Мой вопрос таков: если m_running всегда верно.поэтому, когда я выхожу из игры, поток все еще работает.Это приведет к аварии?

Ответы [ 2 ]

1 голос
/ 27 марта 2011

Будет, если этот поток попытается получить доступ к ресурсам, которые одновременно уничтожаются основным потоком.

Простое выход из приложения не приведет к сбою, если у вас есть рабочий поток, который ничего не делает.

#include <stdio.h>
#include <unistd.h>
#include <pthread.h>

void* run_me(void*)
{
    while (1) 
    { 
       printf("Sleeping..\n");
       sleep(1);
    }
}

int main()
{
    pthread_t my_thread;

    pthread_create(&my_thread, NULL, &run_me, NULL);
    sleep(2);

    return 0;
}
0 голосов
/ 27 марта 2011

return 0; завершает только основной поток. Попробуйте вместо этого использовать exit (0).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...