Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.013 c
2-1135325317
bva
2005-12-23 11:08
2006.01.15
Отключить программно Ctrl+Alt+Del


10-1111376309
msgipss
2005-03-21 06:38
2006.01.15
локальная служба и локальный сервер в dcomcnfg - что это значит?


9-1122904615
Novouralsk
2005-08-01 17:56
2006.01.15
Псевдо анимация


3-1132313834
Карелин Артем
2005-11-18 14:37
2006.01.15
Numeric... Decimal... А отличия есть в них?


14-1134722151
Nikolay M.
2005-12-16 11:35
2006.01.15
Отвечать на вопросы про иконку в трее - вредить самому себе?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский