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

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

Вопрос по потокам. [D7, WinXP]


Destroyer ©   (2005-12-15 16:28:00) 

Вопрос по потокам.
Программа выполняет длитеоьные действия во время которых интерфейс зависает. Хорошобы делать эти действия в потоке. Дело в том, что есть несколько процедур, выполняющих блитеоьные действия. Нет необходимости в том, чтобы все процедуры работали одновременно, но надо чтобы интерфейс не подвисал. Хочу создать один поток, в котором находятся все "длинные" процедуры и вызывать их когда надо. Проблема в том, что похоже выполняться в потоке может только то, что здесь:
procedure TimerThread.Execute;
var i:integer;
begin
 { Place thread code here }
end;

А как вызывать процедуры находящиеся вне этого обработчика? Например proc1 и proc2:

procedure TimerThread.Execute;
var i:integer;
begin
 { Place thread code here }
end;

procedure proc1(...);

begin

end;

procedure proc2(...);
begin

end;
...
Или лучше создать для каждой процедуры свой поток и потом вызывать их?


  (2005-12-26 10:14:00) [1]

Удалено модератором


Destroyer   (2005-12-22 00:42:00) [2]

Спасибо, буду пробовать. Application.ProcessMessages - не решает. К [4], просто думал, что может есть встроенные функции для этого.


Leonid Troyanovsky   (2005-12-19 10:42:00) [3]


> Destroyer ©   (18.12.05 01:58) [2]

> [Error] Unit2.pas(45): Unsatisfied forward or external declaration:
>  'TimerThread.Destroy'


Странно слышать такие заявления от владельца такого ника.

--
Regards, LVT.


evvcom   (2005-12-19 09:45:00) [4]


> Application.ProgressMessages

Application.Pro cessMessages

> Как правильно завершить\остановить поток в произвольное
> время?

завершить - см. [4], остановить см. Suspend, продолжить - см. Resume.


Германн   (2005-12-19 02:52:00) [5]


> Destroyer ©   (15.12.05 16:28)  
>
> Или лучше создать для каждой процедуры свой поток и потом
> вызывать их?
>


Имхо, доп. поток нужен именно для какой-то одной процедуры. Для нескольких таких процедур стоит создать несколько потоков, если они независимы. Имхо.

Но и Application.ProgressMessages проблему не решает?
стоит обсудить и продумать. Имхо.


TStas   (2005-12-19 02:25:00) [6]

А точно поток нужен? Его же отлаживать противно очень. Application.ProgressMessages проблему не решает?


DrPass   (2005-12-19 01:09:00) [7]

В Execute (или где у тебя вычисления) делаешь условие прерывания по какому-нибудь флагу (сойдет и свойство TThread.Terminated). Потом устанавливаешь этот флаг - и все ОК.


Destroyer   (2005-12-19 00:53:00) [8]

Подскажите плз.


Destroyer   (2005-12-18 01:58:00) [9]

Разобрался. Еще вопрос: нужно останавливать поток в произвольный момент времени.
прописывание в
public
destructor Destroy; override;

дает ошибку:
[Error] Unit2.pas(45): Unsatisfied forward or external declaration: 'TimerThread.Destroy'

Как правильно завершить\остановить поток в произвольное время?


Reindeer Moss Eater   (2005-12-15 16:30:00) [10]

procedure TimerThread.Execute;
var i:integer;
begin
proc1;
proc2;
end;


Наверх

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