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