процессы в Delphi

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

matroskin
Сообщения: 38
Зарегистрирован: 17 ноя 2006, 10:53

подскажите где можно посмотреть про процессы Delphi, желательно самые основы
запуск, остановка, и т.д
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

&quot писал(а):подскажите где можно посмотреть про процессы Delphi, желательно самые основы
запуск, остановка, и т.д
В Help'e вестимо, класс TThread
matroskin
Сообщения: 38
Зарегистрирован: 17 ноя 2006, 10:53

somewhere писал(а):В Help'e вестимо, класс TThread
да, это читал, пасиб=)
но интересует следущее: у меня 2 юнита

в Unit1 - основная программа, описывающая процедуры и функции
в Unit2 - будет поток, где я хочу использовать процедуры и функции из Unit1

как это сделать?
совал функции и процедуры в public, не работает
(в uses указал uses Unit2 ;)
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

Выдели описание функции "выше" implementation, т.е:
[syntax="delphi"]...
function SomeFunc(Param: Type): Type;

implementation

function SomeFunc(Param: Type): Type;
begin
{funcs body}
end;
[/syntax]
С уважением, Lost Angel...
matroskin
Сообщения: 38
Зарегистрирован: 17 ноя 2006, 10:53

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]
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

у них разные типы получаются,
function и function of object может в этом проблема, в описаниях методов.

при "запихивании в public" функция слановится методом класса.
т.е. к ней нужно обращаться через переменную (если, конечно, обращение не из родного ей класса):

Form1.proc1;

или если функция в классе потока -

Potok := Process.Create(False);
Potok.Proc1;

т.е. при создании потока надо сохранить эту переменную в которой мы записали указатель на класс потока и обращаться к методам через неё ;)

P.S. внимательно читаем доки по ООП в целом и классам в частности.
P.P.S. названия типов классов принято зачинать с буквы T, возможно Process уже занята и Process.Create вызывает совсем другие действия, чем желаемые.
С уважением, Lost Angel...
matroskin
Сообщения: 38
Зарегистрирован: 17 ноя 2006, 10:53

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, то она выполняется...

блин запутался я с этими юнитами..
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

matroskin, к процессам это похоже не сильно относится...
код в студию обоих юнитов разве что без содержимого процедур для краткости
Изображение
matroskin
Сообщения: 38
Зарегистрирован: 17 ноя 2006, 10:53

Игорь Акопян писал(а):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]
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

а компорт как настроен? там вроде таймауты выставляются
Изображение
Ответить