Значит вопрос вот в чём! Ниже приведу текст кода. Для чего мне он нужен хочу ловить импульс на ноге DSR импус полярности +/-12В вообщем по стандарту RS-232.
Текст кода:
unit co;
{$R *.DFM}
procedure TMyThread.Execute();
begin
{Пока процесс не прервали, выполняем DoWork}
//while not Terminated do
DoWork;
end;
procedure TMyThread.DoWork();
var
ComHdr:THANDLE ;
HOverlapped: TOverlapped;
Tmp :DWORD;
begin
ComHdr:=CreateFile('COM1',
GENERIC_READ or GENERIC_WRITE,
0, nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
if ComHdr=INVALID_HANDLE_VALUE then ShowMessage('устройсво занято!');
SetCommMask(ComHdr, EV_DSR);
HOverlapped.hEvent := CreateEvent(nil, True, True, nil);
Tmp :=EV_DSR;
ShowMessage('Поток запущен');
{ try
while not Terminated do
begin
WaitCommEvent(ComHdr, Tmp, nil);
end
finally
ShowMessage('0');
end;}
try
while not Terminated do
begin
ShowMessage('Цикл начался!');
if WaitCommEvent(ComHdr, Tmp, nil)=false then !!!/ВОТ ЗДЕСЬ И НЕ РАБОТАЕТ. ТОЕСТЬ ПРИ ПОДАЧИ ИМПУЛЬСА НЕ ПОЯВЛЯЕТСЯ НИ ОДНО ИЗ НИЖЕ ПРИВЕДЁННЫХ СООБЩЕНИЙ (ShowMessage)! вопрос ПОЧЕМУ?/
ShowMessage('Лож') else
ShowMessage('Правда');;
ShowMessage('Цикл выполнен');
end
finally
ShowMessage('0');
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
{c,}b,A: TLargeInteger;
arr: array [0..99] of Integer;//Single;//integer;
c,i: integer;
begin
QueryPerformanceFrequency(A);
for i:=0 to 99 do
begin
QueryPerformanceCounter(b);
arr[i]:=round(b*1000000/A);
//sleep(1);
end;
for i:=1 to 99 do
Memo1.Lines.Add(IntToStr(arr[i]-arr[i-1]));
// ShowMessage('1');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if ThMy=nil then
ThMy:=TMyThread.Create(False)
else
ShowMessage('хватит кнопку клацать!');
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Application.ProcessMessages();
end;