The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Управление потоками в 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.



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

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