У меня есть поток под названием mainloop
Как обнаружить ранний выход из pthread_create без блокировки слишком долго?
т.е.
int run_mainloop;
void* mainloop(void* param)
{
// local vars
// initialize local vars
while(run_mainloop)
{
// run mainloop
}
return 0;
}
Нить стартовавший из функции, называемой client_open
, т.е.
int client_open()
{
run_mainloop = 1;
return pthread_create(&thread, NULL, mainloop, NULL);
}
Однако в mainloop
если инициализация локальных переменных не может мне нужно сообщить client_open
сразу после раннего выхода.
pthread_join
неуместно, поскольку он блокирует, и я не могу иметь client_open
блок. Если бы подождать короткое время, прежде чем вернуться, это будет нормально.
Как я мог сделать это красиво, не используя pthread_join, который будет блокироваться. Я хочу, чтобы получить код возврата.
Поскольку вы используете Linux, вы можете использовать 'pthread_tryjoin_np', но' np' здесь означает «не переносимый»! – fge
fge, все будет хорошо, так как это реализация только linux. Вы хотите предложить это как ответ и, возможно, предложить альтернативу? – Matt