쓰레드로 일정시간 마다 이벤트를 받아. 특정 값을 비교하는 검사 로직을 구현 중입니다.
검사로직 부분에서 카운터 비교가 틀리면 알람을 발생시키고,
메인폼에 버튼을 두어 알람 해제기능을 합니다 .
근데..프로그램이 초반에 잘 돌다가.. 검사쪽에서 알람을 발생 시키는데 10분 정도 되면 메인폼의 버튼을 클릭하면 먹통이 되는 현상이 발생되네요.. ㅡ.ㅡ;
폼에서 아예 버튼이벤트를 처리 못하는 것 같기도 하고, 버튼이 아예 동작을 한하는 건 같습니다.
정확한 원인을 찾기가 힘드네요.
고수님들의 도움 부탁 드림니다. ..
--- 메인폼 -
procedure TfrmMain.tmrChkTimer(Sender: TObject); //검사 타이머.
var
errCode : integer;
begin
tmrChk.Enabled := false;
if (a - c) < b then begin
알람 발생.
memo1.lines.add('카운터 오류입니다.');
end;
c := a
end;
procedure TfrmMain.btnAlarmClearClick(Sender: TObject); //알람해제 버튼.
begin
application.ProcessMessages;
알람해제.
end;
-- 쓰레드 Unit ----
procedure TSensorThread.Execute;
begin
oldT := GetTickCount;
while(not Terminated)do
begin
if WaitForSingleObject(irEvent[0], 500) = WAIT_OBJECT_0 then
begin//10 초 마다 이벤트 발생.
frmMain.memo1.Lines.Add('Press : ' + inttostr(sscount));
frmMain.tmrChk.Enabled := true; // 500ms 뒤에 검사
sscount := sscount + 1;
end;
end;
end;
쓰레드에서 VCL을 쓰실려면 쓰레드의 Synchronize메소드를 이용해서 사용하세요.