저는 오래된 Sony Ericsson 전화를 사용하여 AT 명령을 쓰고 읽는 작은 구성 요소로 작업하고 있습니다. 전화로 /에서 보내고 쓰는 것이 전혀 문제가되지 않지만 SendATCmd 함수를 일시 중지하고 COM 포트 구성 요소가 알림 이벤트로 알림을 보내고 SendATCmd 함수를 다시 시작할 때까지 기다릴 수 있기를 바랍니다.루프에서 더 많은 데이터를 보내기 전에 COM 포트 수신 이벤트를 기다리는 방법
시나리오 : 전화에서 SMS 메시지의 수를 얻고 싶습니다. 일반적으로 나는 그저 전화를 말할 것입니다 : 이봐, 얼마나 많은 SMS 메시지가 있니? 전화가 알림 이벤트에서 회신합니다. 그게 다 좋다.
하지만 제가 정말하고 싶은 것은 SendATCmd의 코드는 다음과 같습니다
if SendATCmd('CountSMS')>0 then
for 0 to SMSCount do
AddSMSToList;
같은 : 나는 잠시 루프를 사용하여 시도했다
function TSE_Z1010.SendATCmd(Cmd: string): TATResult;
begin
fCOMPort.PutString(Cmd); //Sending AT command
//Here is where I would like to pause this function
//wait for the fCOMPort to notify me when data is available
//and then resume this function again.
result:=fTMPATResult;
end;
, 일시 정지, 등 등 ,하지만 한 가지를 제외하고는 아무 것도 작동하지 않습니다. 그 때 멈춤이 있어야하는 ShowMessage를 넣습니다. ShowMessage가 내부적으로 어떻게 작동하는지 모르지만 while 루프와 일시 중지처럼 프로그램을 중단시키지 않는 것으로 보입니다.
==================
수정 됨.
내가 할 일은 uses 절에 Forms를 추가 한 다음 fTMPATResult.Full = false를 추가하는 것입니다. Application.ProcessMessages; 내가 그 절차를 일시 중지하고 싶은 부분에서.
"fTMPATResult"는 수신 COM 포트 데이터가 구성 요소 내에 전역으로 저장되는 변수입니다.
답변이있는 경우 질문에 대한 편집이 아닌 답변으로 추가하십시오. –
그것은 내 자신의 질문에 대한 답변을 추가하기에 충분한 점수가 없다고 말했습니다. – xaid
사용하는 직렬 통신 구성 요소 (fCOMPort) 란 무엇입니까? – menjaraz