![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по потокам. [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;