Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > потоки в Билдере


Автор: likehood 15.3.2006, 14:27
Возник такой вопрос.

Если поток (thread) уже отработал, то можно ли опять запустить его не создавая
нового объекта потока?

Автор: Romikgy 15.3.2006, 14:31
Если установлен FreeOnTerminate, то 100% нет, а зачем это делать,
имхо проще пересоздать

Автор: Mechatronic 7.4.2010, 19:55
В конце Execute() убивай поток методом Terminate(). При конфигурировании созданого потока указывай FreeOnTerminate=true. А как потребуется запустить снова- просто заново выделяй память...

Автор: Michrutka 9.4.2010, 09:46
можно. просто надо в потоке цикл сделать
в execute()
Код

while(!Terminated)
{
//...
//тело потока
//...
Suspend(); // тут он остановится пока не будет выполнен метод Resume()
}


когда тебе нужно будет возобновить поток - вызываешь 
Код
Resume()

чтобы уничтожить поток необходимо выполнить последовательно 
Код

Resume();
Terminate();

Автор: _Dimon_ 9.4.2010, 15:41
Билдер 2010 на Resume и Suspend "плохо реагирует"!!!
Код

[BCC32 Warning] Hardware.cpp(64): W8111 Accessing deprecated entity '_fastcall TThread::Resume()'


Я спросил об этом здесь http://forum.vingrad.ru/forum/topic-274143.html, но мне ответили
Код

Это значит, что метод TThread::Resume устарел, и его использование не рекомендуется. Что рекомендуется использовать вместо этого в RAD2010 я не в курсе...



Вопрос остался открытым, хотя Resume и Suspend работают нормально

Автор: Alca 9.4.2010, 16:01
Цитата

Билдер 2010 на Resume и Suspend "плохо реагирует"!!!

B Java-2 тоже

Добавлено через 1 минуту и 28 секунд
и boost тоже

Добавлено через 3 минуты и 42 секунды
Цитата

хотя Resume и Suspend работают нормально

Возможны дедлоки

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)