Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2013, 18:41   #1
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
Печаль Грабли с TThread...

Есть некий поток, который сам себя Suspend'ит.
Код:
void __fastcall TMyThread::Execute()
{
  while( !Terminated )
  {
    // Некоторый процессинг
    Suspend();
  }
}
Возникла реальная трабла по его удалению. Допустим
Код:
__fastcall TMyThread::~TMyThread()
{
  Terminate();
}
не прокатывает, так как в этот момент поток может быть Suspended, и до проверки !Terminated дело просто не дойдёт. Казалось бы, тоже ничего сложного
Код:
__fastcall TMyThread::~TMyThread()
{
  Terminate();
  if( Suspended )
  {
    Resume();
  }
}
Однако, практика [навтыкал везде запись в лог-файл] показывает, что поток может сначала сказать, что он совсем не Suspended, т.е., условие в деструкторе не выполнится, а после этого тут же выполнит Suspend в методе Execute, программа закрывается, но продолжает висеть в процессах. Не гут. Уважаемая публика, какие будут предложения?
FataLL вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При освобождении обьекта TThread, он вешает всю программу. При этом код Execute у TThread уж выполнился.. Человек_Борща Общие вопросы Delphi 23 30.11.2011 09:18
MMOFPS: разработка и возможные грабли russian-stalker Gamedev - cоздание игр: Unity, OpenGL, DirectX 15 21.12.2010 21:04
Показательные грабли guz Общие вопросы C/C++ 1 25.11.2010 11:11
TThread Vladislav_I Общие вопросы Delphi 0 30.04.2010 19:47
TThread в Дельфи ImmortalAlexSan Помощь студентам 2 23.04.2010 16:24