The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Управление потоками в c++"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Управление потоками в c++"
Сообщение от Anton emailИскать по авторуВ закладки(??) on 16-Авг-04, 14:07  (MSK)
Вопрос: как, при использовании pthread, из главного потока убить порожденный? В документации описана функция int pthread_exit(void* data), но она, насколько я понял, завершает текущий поток. А мне надо реализовать следующую схему:
1. породить поток
2. родитель ждет некоторое время.
3. если порожденный поток еще не завершен, то завершить его из родителя.

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Управление потоками в c++"
Сообщение от Anton emailИскать по авторуВ закладки(??) on 16-Авг-04, 14:35  (MSK)
Попробовал присвоить NULL потоку:

pthread_create( &thread1, ....
...
...
time_t t = time(NULL);
while( time(NULL) < ( t + (time_t)12 ) );

thread1 = NULL;

Это работает, но я чувствую, что это не красиво.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Управление потоками в c++"
Сообщение от klalafuda emailИскать по авторуВ закладки on 16-Авг-04, 14:41  (MSK)
>Попробовал присвоить NULL потоку:
>
>pthread_create( &thread1, ....
>...
>...
>time_t t = time(NULL);
>while( time(NULL) < ( t + (time_t)12 ) );
>
>thread1 = NULL;
>
>Это работает, но я чувствую, что это не красиво.

простите, а откуда вы взяли, что присваивая NULL указателю на идентификатор потока вы вообще хоть как-то влияете на поток ?

man pthread_cancel

ps: насильственно убивая исполняющийся поток, вы потенциально имеете целый букет соответствующих последствий.

// wbr

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Управление потоками в c++"
Сообщение от Anton emailИскать по авторуВ закладки(??) on 16-Авг-04, 15:03  (MSK)
  Честно говоря, от безысходности ситуации. Я размышлял так: с потоком что-то связано, а "убив" (= NULL), все концы канут в воду. Ну это так, наивные домыслы. Интересно то, что это у меня сработало, не знаю уж как?
  Спасибо за пинок в нужном направлении, странно, но в man-ах по pthread_exit, pthread_create и проч. нет ссылок на pthread_cancel. При использовании pthread_cancel, вероятно, проблем не уменьшится?
  Может есть еще какие-нибудь способы? Мне нужно, чтобы при исполнении потока не блокировался stdin и "главная" программа могла реагировать на действия пользователя, я использую ncurses.
  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру