Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
15-1234187406
321
2009-02-09 16:50
2009.04.12
Докеры


4-1208241010
Petrovich
2008-04-15 10:30
2009.04.12
0xc0000008 при подключении процедуры из DLL


3-1219063290
kirillrepin
2008-08-18 16:41
2009.04.12
Заполнение DBListBox при помощи StoredProc


15-1234215001
Юрий
2009-02-10 00:30
2009.04.12
С днем рождения ! 10 февраля 2009 вторник


15-1234454090
Копир
2009-02-12 18:54
2009.04.12
Легендарный фильм "Мастер и Маргарита" 1994 г. Режиссер Юрий Кара