Страница 1 из 2

процессы в Delphi

Добавлено: 18 дек 2006, 15:52
matroskin
подскажите где можно посмотреть про процессы Delphi, желательно самые основы
запуск, остановка, и т.д

Re: процессы в Delphi

Добавлено: 18 дек 2006, 17:16
somewhere
&quot писал(а):подскажите где можно посмотреть про процессы 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 :D 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
Игорь Акопян
а компорт как настроен? там вроде таймауты выставляются