Вопрос: как, при использовании pthread, из главного потока убить порожденный? В документации описана функция int pthread_exit(void* data), но она, насколько я понял, завершает текущий поток. А мне надо реализовать следующую схему:
1. породить поток
2. родитель ждет некоторое время.
3. если порожденный поток еще не завершен, то завершить его из родителя.Печально то, что порожденный поток у меня может зависнуть, поэтому я не могу выставлять всякие таймауты в нем самом.
Спасибо!
Попробовал присвоить NULL потоку:pthread_create( &thread1, ....
...
...
time_t t = time(NULL);
while( time(NULL) < ( t + (time_t)12 ) );thread1 = NULL;
Это работает, но я чувствую, что это не красиво.
>Попробовал присвоить NULL потоку:
>
>pthread_create( &thread1, ....
>...
>...
>time_t t = time(NULL);
>while( time(NULL) < ( t + (time_t)12 ) );
>
>thread1 = NULL;
>
>Это работает, но я чувствую, что это не красиво.простите, а откуда вы взяли, что присваивая NULL указателю на идентификатор потока вы вообще хоть как-то влияете на поток ?
man pthread_cancel
ps: насильственно убивая исполняющийся поток, вы потенциально имеете целый букет соответствующих последствий.
// wbr
Честно говоря, от безысходности ситуации. Я размышлял так: с потоком что-то связано, а "убив" (= NULL), все концы канут в воду. Ну это так, наивные домыслы. Интересно то, что это у меня сработало, не знаю уж как?
Спасибо за пинок в нужном направлении, странно, но в man-ах по pthread_exit, pthread_create и проч. нет ссылок на pthread_cancel. При использовании pthread_cancel, вероятно, проблем не уменьшится?
Может есть еще какие-нибудь способы? Мне нужно, чтобы при исполнении потока не блокировался stdin и "главная" программа могла реагировать на действия пользователя, я использую ncurses.