Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поток и обработка процедуры [D7, Win95/98, WinME, NT4, Win2k, WinXP]


Sun bittern ©   (2005-01-05 20:51:00) 

Доброго вечера всем!

Вопрос больше теоритический.
Например есть некий поток. Ему в конструктор в качестве параметра передается:

type
 TMyProcedure = procedure(...);
Create(..., MyProcedure: TMyProcedure);

Далее поток выполняет свой код, и допустим, я захотел его на время усыпить:

procedure TMyThread.Execute;
begin
 ...
   MyProcedure
   {
   Может ли поток уснуть тут?
   }
 ...
end;

Поясню: может ли существовать момент времени, что при попытке усыпить поток, он может остановить обработку кода внутри тела MyProcedure? Или поток сначала завершит обработку MyProcedure, а затем уснет?

Вобшем суть задумки: как в Total Commander при копировании файлов информация выводится на одну форму. Если ему сказать копировать в фоновом режиме, то результат уже выходит на другой форме.
Хочу чего-то подобное схимичить.


Sun bittern   (2005-01-06 18:11:00) [1]

KSergey ©   (06.01.05 09:04) [4]

Усыплять - дать возможность преостановить некий процесс обработки данных, если есть необходимость. Ну и задача - подменить вывод информации если надо. Всетаки штука получается многопоточная, хрен его знает, лучше не рисковать. Наверно всетаки лучше усыплять его в нужное время и в нужном месте.

Вобшем кодить начнем, если не пойдет, то спросим :)


KSergey   (2005-01-06 09:04:00) [2]

Я не понял зачем кого-то усыплять? Может я просто не видел Total Commander? ;)
Если есть задача подменять вывод - то я бы сделал копирование всегда в потоке, а ему бы выставлял флаг (ну или как-то там еще, много чего наворотить можно) куда выводить информацию о процессе...
Зачем кого-то усыплять - я так и не понял...


GuAV   (2005-01-05 22:28:00) [3]

Sun bittern ©   (05.01.05 20:51)
Вобшем суть задумки: как в Total Commander при копировании файлов информация выводится на одну форму. Если ему сказать копировать в фоновом режиме, то результат уже выходит на другой форме.
Хочу чего-то подобное схимичить.


Меня этот вопрос тоже когда-то заинтересовал. Оказывается, окно фонового копирования - не VCL.


Alexander Panov   (2005-01-05 21:32:00) [4]

Во время выполнения кода в процедуре Execute ты в любой момент можешь усыпить поток. Соответственно, поток останвит свое выполнение сразу после выполнения Suspend.


Sun bittern   (2005-01-05 21:06:00) [5]

Или лучше может сделать так?
Для TThread создать дополнительный метод и свойство, сообщающие о том, что поток хотят усыписть.

А далее:
procedure TMyThread.Execute;
begin
 ...
   MyProcedure
 ...
if MySuspend then {поток усыпит сам себя}
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо