Основном это то, что у меня есть:C++ Confused о Threads
Server::
Server (int port) {
cout << "Initializing server.\n";
(...)
pthread_t newthread;
pthread_create(&newthread, NULL, &Server::_startListening, NULL);
cout << "Exit\n";
pthread_exit(NULL); // <-- Question
}
void* Server::_startListening (void* param) {
cout << "Start listening for clients ...\n";
return 0;
}
Вопрос: Если я не ставлю pthread_exit (NULL); в коде он будет работать, когда я скомпилирую его на Linux (Ubuntu), но он не будет работать на Mac OSX 10.6.2. Когда я компилирую и запускаю его на Linux, он скажет: «Инициализирующий сервер», «Начать прослушивание клиентов», «Выход» на Mac OSX, он скажет «Инициализация для сервера», «Выход», «Начать прослушивание клиентов».
Проблема, кажется, происходит вокруг pthread_exit, если я размещаю ее над cout < < Выход. Это сообщение никогда не будет отображаться (как это странно).
Я что-то не так?
Что вы ожидаете 'pthread_exit (NULL);' делать? –
Но почему Mac OS игнорирует поток, если pthread_exit или pthread_join не задан? – Mark