Страница 1 из 2
процессы в Delphi
Добавлено: 18 дек 2006, 15:52
matroskin
подскажите где можно посмотреть про процессы Delphi, желательно самые основы
запуск, остановка, и т.д
Re: процессы в Delphi
Добавлено: 18 дек 2006, 17:16
somewhere
" писал(а):подскажите где можно посмотреть про процессы Delphi, желательно самые основы
запуск, остановка, и т.д
В Help'e вестимо, класс TThread
Re: процессы в Delphi
Добавлено: 19 дек 2006, 12:19
matroskin
somewhere писал(а):В Help'e вестимо, класс TThread
да, это читал, пасиб=)
но интересует следущее: у меня 2 юнита
в Unit1 - основная программа, описывающая процедуры и функции
в Unit2 - будет поток, где я хочу использовать процедуры и функции из Unit1
как это сделать?
совал функции и процедуры в public, не работает
(в uses указал uses Unit2

Re: процессы в Delphi
Добавлено: 19 дек 2006, 12:36
LAngel
Выдели описание функции "выше" implementation, т.е:
[syntax="delphi"]...
function SomeFunc(Param: Type): Type;
implementation
function SomeFunc(Param: Type): Type;
begin
{funcs body}
end;
[/syntax]
Re: процессы в Delphi
Добавлено: 19 дек 2006, 14:19
matroskin
LAngel писал(а):Выдели описание функции "выше" implementation, т.е:
[syntax="delphi"]...
function SomeFunc(Param: Type): Type;
implementation
function SomeFunc(Param: Type): Type;
begin
{funcs body}
end;
[/syntax]
да, пасиб работает!!
но почемуто не выполняется функция proc1, если я ее запихиваю в Unit1
[syntax="delphi"]
unit Unit2;
interface
uses
Classes, Dialogs;
type
Process = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
end;
procedure proc1;
implementation
uses unit1;
procedure Process.Execute;
begin
showmessage('eee');
end;
procedure proc1;
begin
Process.Create(false);
end;
begin
End.
[/syntax]
Re: процессы в Delphi
Добавлено: 19 дек 2006, 15:26
LAngel
у них разные типы получаются,
function и function of object может в этом проблема, в описаниях методов.
при "запихивании в public" функция слановится методом класса.
т.е. к ней нужно обращаться через переменную (если, конечно, обращение не из родного ей класса):
Form1.proc1;
или если функция в классе потока -
Potok := Process.Create(False);
Potok.Proc1;
т.е. при создании потока надо сохранить эту переменную в которой мы записали указатель на класс потока и обращаться к методам через неё
P.S. внимательно читаем доки по ООП в целом и классам в частности.
P.P.S. названия типов классов принято зачинать с буквы T, возможно Process уже занята и Process.Create вызывает совсем другие действия, чем желаемые.
Re: процессы в Delphi
Добавлено: 19 дек 2006, 15:54
matroskin
LAngel писал(а):у них разные типы получаются,
function и function of object может в этом проблема, в описаниях методов.
при "запихивании в public" функция слановится методом класса.
т.е. к ней нужно обращаться через переменную (если, конечно, обращение не из родного ей класса):
Form1.proc1;
или если функция в классе потока -
Potok := Process.Create(False);
Potok.Proc1;
т.е. при создании потока надо сохранить эту переменную в которой мы записали указатель на класс потока и обращаться к методам через неё
P.S. внимательно читаем доки по ООП в целом и классам в частности.
P.P.S. названия типов классов принято зачинать с буквы T, возможно Process уже занята и Process.Create вызывает совсем другие действия, чем желаемые.
не, process не забит

да, но если я помещаю процедуру proc1 в тело Unit2, то она выполняется...
блин запутался я с этими юнитами..
Re: процессы в Delphi
Добавлено: 20 дек 2006, 10:19
Игорь Акопян
matroskin, к процессам это похоже не сильно относится...
код в студию обоих юнитов разве что без содержимого процедур для краткости
Re: процессы в Delphi
Добавлено: 20 дек 2006, 15:03
matroskin
Игорь Акопян писал(а):matroskin, к процессам это похоже не сильно относится...
код в студию обоих юнитов разве что без содержимого процедур для краткости
не, все запихнул в один юнит

хоть созадал поток на обработку данных с соm порта, если с него (com порта) не приходит ничего форма висит, как и было без потока..

вот код:
[syntax='delphi]
....
procedure TFirstProcess.Execute;
begin
while not Terminated do
Synchronize(Work);
end;
procedure TFirstProcess.Work;
var a

WORD;
begin
OpenCom;
WriteCom;
if SetCommMask(fHandle, EV_RXCHAR) then
WaitCommEvent(fHandle, a, nil)
else ShowMessage('cant wait for com buffer');
if (a=EV_RXCHAR) then
begin
ReadCom;
//mm1.Lines.Add(IntToStr(z)+' '+s);
PurgeComm(fhandle,PURGE_RXCLEAR);
end;
ClosePort;
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
p1:=TFirstProcess.Create(False);
end;
...
[/syntax]
Re: процессы в Delphi
Добавлено: 21 дек 2006, 10:24
Игорь Акопян
а компорт как настроен? там вроде таймауты выставляются