процессы в Delphi
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
подскажите где можно посмотреть про процессы Delphi, желательно самые основы
запуск, остановка, и т.д
запуск, остановка, и т.д
В Help'e вестимо, класс TThread" писал(а):подскажите где можно посмотреть про процессы Delphi, желательно самые основы
запуск, остановка, и т.д
да, это читал, пасиб=)somewhere писал(а):В Help'e вестимо, класс TThread
но интересует следущее: у меня 2 юнита
в Unit1 - основная программа, описывающая процедуры и функции
в Unit2 - будет поток, где я хочу использовать процедуры и функции из Unit1
как это сделать?
совал функции и процедуры в public, не работает
(в uses указал uses Unit2

Выдели описание функции "выше" implementation, т.е:
[syntax="delphi"]...
function SomeFunc(Param: Type): Type;
implementation
function SomeFunc(Param: Type): Type;
begin
{funcs body}
end;
[/syntax]
[syntax="delphi"]...
function SomeFunc(Param: Type): Type;
implementation
function SomeFunc(Param: Type): Type;
begin
{funcs body}
end;
[/syntax]
С уважением, Lost Angel...
да, пасиб работает!!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]
у них разные типы получаются,
function и function of object может в этом проблема, в описаниях методов.
при "запихивании в public" функция слановится методом класса.
т.е. к ней нужно обращаться через переменную (если, конечно, обращение не из родного ей класса):
Form1.proc1;
или если функция в классе потока -
Potok := Process.Create(False);
Potok.Proc1;
т.е. при создании потока надо сохранить эту переменную в которой мы записали указатель на класс потока и обращаться к методам через неё
P.S. внимательно читаем доки по ООП в целом и классам в частности.
P.P.S. названия типов классов принято зачинать с буквы T, возможно Process уже занята и Process.Create вызывает совсем другие действия, чем желаемые.
function и function of object может в этом проблема, в описаниях методов.
при "запихивании в public" функция слановится методом класса.
т.е. к ней нужно обращаться через переменную (если, конечно, обращение не из родного ей класса):
Form1.proc1;
или если функция в классе потока -
Potok := Process.Create(False);
Potok.Proc1;
т.е. при создании потока надо сохранить эту переменную в которой мы записали указатель на класс потока и обращаться к методам через неё

P.S. внимательно читаем доки по ООП в целом и классам в частности.
P.P.S. названия типов классов принято зачинать с буквы T, возможно Process уже занята и Process.Create вызывает совсем другие действия, чем желаемые.
С уважением, Lost Angel...
не, process не забитLAngel писал(а):у них разные типы получаются,
function и function of object может в этом проблема, в описаниях методов.
при "запихивании в public" функция слановится методом класса.
т.е. к ней нужно обращаться через переменную (если, конечно, обращение не из родного ей класса):
Form1.proc1;
или если функция в классе потока -
Potok := Process.Create(False);
Potok.Proc1;
т.е. при создании потока надо сохранить эту переменную в которой мы записали указатель на класс потока и обращаться к методам через неё
P.S. внимательно читаем доки по ООП в целом и классам в частности.
P.P.S. названия типов классов принято зачинать с буквы T, возможно Process уже занята и Process.Create вызывает совсем другие действия, чем желаемые.

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

не, все запихнул в один юнитИгорь Акопян писал(а):matroskin, к процессам это похоже не сильно относится...
код в студию обоих юнитов разве что без содержимого процедур для краткости

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

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

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
- Откуда: СПБ
- Контактная информация:
а компорт как настроен? там вроде таймауты выставляются
