Форум: "Начинающим";
Текущий архив: 2006.01.15;
Скачать: [xml.tar.bz2];
ВнизВопрос по потокам. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c