Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.15;
Скачать: CL | DM;

Вниз

Вопрос по потокам.   Найти похожие ветки 

 
Destroyer ©   (2005-12-15 16:28) [0]

Вопрос по потокам.
Программа выполняет длитеоьные действия во время которых интерфейс зависает. Хорошобы делать эти действия в потоке. Дело в том, что есть несколько процедур, выполняющих блитеоьные действия. Нет необходимости в том, чтобы все процедуры работали одновременно, но надо чтобы интерфейс не подвисал. Хочу создать один поток, в котором находятся все "длинные" процедуры и вызывать их когда надо. Проблема в том, что похоже выполняться в потоке может только то, что здесь:
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;
...
Или лучше создать для каждой процедуры свой поток и потом вызывать их?


 
Reindeer Moss Eater ©   (2005-12-15 16:30) [1]

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


 
Destroyer ©   (2005-12-18 01:58) [2]

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

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

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


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

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


 
DrPass ©   (2005-12-19 01:09) [4]

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


 
TStas ©   (2005-12-19 02:25) [5]

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


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


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


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

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


 
evvcom ©   (2005-12-19 09:45) [7]


> Application.ProgressMessages

Application.ProcessMessages

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

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


 
Leonid Troyanovsky ©   (2005-12-19 10:42) [8]


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

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


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

--
Regards, LVT.


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

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


 
имя   (2005-12-26 10:14) [10]

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



Страницы: 1 вся ветка

Текущий архив: 2006.01.15;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.045 c
14-1134634406
Progger
2005-12-15 11:13
2006.01.15
Мороженые пельмени.


2-1135686629
фома
2005-12-27 15:30
2006.01.15
канва


14-1134582151
Knight
2005-12-14 20:42
2006.01.15
Как лучше организовать подключение пользователей к своей тарелке?


14-1135279886
В.И Мухин
2005-12-22 22:31
2006.01.15
Требуется программист


14-1135346937
MasterPaleva
2005-12-23 17:08
2006.01.15
Диалог с богом