Текущий архив: 2009.04.12;
Скачать: CL | DM;
Вниз
Запустить TThread повторно? Найти похожие ветки
← →
Тын-Дын © (2009-02-22 03:50) [80]Ну вобщем-то всё нормально.
За исключением таких моментов:
1. Нет проверки на то, что поток занят выполнением. Отключение кнопок - это несерьёзно.
2. Код не защищён от одновременной попытки запуска нового задания.
Это приведёт к сложноуловимым ошибкам при выполнении в многопоточном приложении. Особенно на многопроцессорном компьютере.
Над этими проблемами ещё придётся поработать тому, кто возьмётся писать таким образом-)
← →
Тын-Дын © (2009-02-22 03:52) [81]
> Cobalt © (22.02.09 03:46) [78]
>Т.е. дернул объект - тот запустил
> поток, обновил состояния, типа Terminated, Suspended и т.
> п.
И как часто у тебя такое происходит?
Может проще воспользоваться функцией QueueUserWorkItem?
← →
Медвежонок Пятачок © (2009-02-22 03:54) [82]твой класс- обертка над Thread - это у меня код TForm1
то есть все точно так же укладывается в эту модель.
← →
жж (2009-02-22 10:36) [83]В данном случае никакая нить вообще не нужна.
ради доступности кнопки "отмена" городить весь огород - это лишнее.
Если бы задачка была фоновая сама по себе, а пользователь тем временем занимался бы в твоей программе чем то другим - то да, потоки, и все дела
а если он все равно будет сидеть ждать результатов, и максимум что может - отменить процесс, то задача решается вставкой обработок цикла сообщений приложением, и все.
← →
Leonid Troyanovsky © (2009-02-22 10:43) [84]
> Cobalt © (21.02.09 15:14)
> Например, запустив его метод Create - будет ли создан новый
> объект TThread, который повиснет в памяти, или он только
> отработает свой код, заново запустив WinAPI-ый поток исполняться?
Вызов как метода, т.е. T.Create(..), выполнит повторную инициализацию
объекта и запуск потока.
Раньше, в D3 еще, IMHO, у борландов в конструкторе был пропущен
inherited Create и фокус не проходил потому, что не обнулялись поля,
тот же самый FTerminated.
--
Regards, LVT.
← →
Cobalt © (2009-02-22 11:31) [85]2 Leonid Troyanovsky © (22.02.09 10:43) [84]
Спасибо, не был знаком с особенностями вызова конструктора у уже созданного объекта., спасибо :)
← →
Тын-Дын © (2009-02-22 14:07) [86]
> Leonid Troyanovsky © (22.02.09 10:43) [84]
>Вызов как метода,
> т.е. T.Create(..), выполнит повторную инициализациюобъекта
> и запуск потока.
При этом
1. будет потерян дескриптор нити (не освобождён) и все выделенные ресурсы, так как деструктор не отработает.
2. будет создана новая нить (а не повторно использоваться существующая).
Хотя автора это вполне может устраивать.
← →
тимохов (2009-02-22 18:23) [87]
> Leonid Troyanovsky © (22.02.09 10:43) [84]
>
> Раньше, в D3 еще, IMHO, у борландов в конструкторе был пропущен
>
> inherited Create и фокус не проходил потому, что не обнулялись
> поля,
> тот же самый FTerminated.
да вроде не в констукторе поля то обнуляются, а в прологе конструктора, типа NewInstance и InitInstance.
← →
Leonid Troyanovsky © (2009-02-23 08:59) [88]
> тимохов (22.02.09 18:23) [87]
> > тот же самый FTerminated.
> да вроде не в констукторе поля то обнуляются, а в прологе
> конструктора
Да, здесь я погнал, ничего не обнуляется, sorry.
Т.е., если был Terminate, то FTerminated и останется true.
А с учетом [86] конструктор должен выглядеть примерно так:
constructor TMyThread.Create;
begin
PBoolean(@Terminated)^ := False;
if Handle <> 0 then
CloseHandle(Handle);
inherited;
end;
--
Regards, LVT.
← →
DVM © (2009-02-23 12:11) [89]
> Вызов как метода, т.е. T.Create(..), выполнит повторную
> инициализацию
> объекта и запуск потока.
Не надо так делать, несмотря на то, что возможно, будут утечки ресурсов, закончится все плохо. Тем более в данной конкретной задаче.
> Cobalt © (21.02.09 18:18) [6]
>
> > DVM © (21.02.09 17:28) [5]
> Так еще ж нужно знать, что он обошел всё, и всё подсчитал.
>
Ну и как это связано? Посчитал - уведомил кого надо, например главный поток, например сообщением и пошел себе считать дальше, или не пошел, а заснул до уведомления.
← →
Игорь Шевченко © (2009-02-23 14:41) [90]"Вот из-за этого у нас в стране и бардак, что всякие вроде вас создают индексы по пяти полям" (с) sql.ru
← →
Leonid Troyanovsky © (2009-02-23 17:01) [91]
> Игорь Шевченко © (23.02.09 14:41) [90]
> "Вот из-за этого у нас в стране и бардак
Суров, брат :)
--
Regards, LVT.
Страницы: 1 2 3 вся ветка
Текущий архив: 2009.04.12;
Скачать: CL | DM;
Память: 0.62 MB
Время: 0.017 c