![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TThread [D6, Win2k]
Alibaba © (2003-08-20 18:39:00)
Народ, помогите, не могу перезапустить поток.
1 Шаг.
constructor TM1Depend.Create;
begin
...
FreeOnTerminate:=False; //По окончанию не разрушается
inherited Create(True); //Создаем поток c ожиданием. Запуск: Resume
end;
2. Шаг
M1Depend.Resume;
3. Шаг
Обрабатываю результат
4. Шаг
M1Depend.Resume; НЕ РАБОТАЕТ!!!
Polevi (2003-09-01 15:58:00) [21]
это не важно, главное что супер :)
Digitman (2003-09-01 15:45:00) [22]
> Alibaba
только подход такой (с Suspend и Resume) все равно есть и остается проктологическим)
Alibaba (2003-09-01 12:14:00) [23]
>Digitman © (21.08.03 10:40) [4]
Спасибо. Все работает супер.
И каждый раз создавать поток ненадо!
Alibaba (2003-08-22 12:07:00) [24]
>Digitman © (21.08.03 10:40) [4]
Счас попробую....
Digitman (2003-08-21 10:40:00) [25]
> Похоже, придется каждый раз создавать/удалять поток.
совершенно необязательно
возможный вариант :
procedure TM1Depend.Execute;
begin
while not Terminated do
begin
// здесь - вычисления и формирование результата
Suspend; // очередное дело сделано - можно чуток поспать, пока не разбудят извне
end;
end;
1 Шаг.
constructor TM1Depend.Create;
begin
...
// FreeOnTerminate:=False; //это св-во = False по умолчанию
inherited Create(True); //Создаем поток c ожиданием. Запуск: Resume
end;
2. Шаг
// передаем параметры для очередных вычислений в объект-поток
M1Depend.Resume; // разбудим поток - нехай считает
3. Шаг
// ждем результата , факт их наличия - Suspended = True
Обрабатываю результат
4. Шаг
// передаем другие параметры для очередных вычислений в объект-поток
M1Depend.Resume; // разбудим поток - нехай считает снова
5. Шаг
// ждем очер.результата , факт их наличия - опять же Suspended = True
Обрабатываю результат
6. Шаг
// командуем потоку - все, хватит, закругляйся !
M1Depend.Terminate; // собственно - команда
M1Depend.Reasume; // разбудим поток, первое что он сделает - проверит, не скомандовали ли ему флагом Terminated закруглиться
M1Depend.WaitFor; // ждем, пока поточная ф-ция завершится
M1Depend.Free; // собственно разрушаем отработавший объект M1Depend, управлявший поточной ф-цией
panov (2003-08-21 10:36:00) [26]
Ты ведь не описал свою задачу.
Поэтому других решений никто пока предложить не может.
Alibaba (2003-08-21 10:21:00) [27]
Похоже, придется каждый раз создавать/удалять поток.
jack128 (2003-08-20 21:19:00) [28]
> 3. Шаг
> Обрабатываю результат
Раз обрабатываешь результат, то поток уже отработал...
> 4. Шаг
> M1Depend.Resume; НЕ РАБОТАЕТ!!!
Естественно, поток то уже завершился...
FreeOnTerminate:=False; говорит о том, что объект Дельфей Tthread не будет разрушен, а вот объект Windows - thread уничтожается, как только он(поток) отработает...