Я работаю над небольшим компонентом для записи и чтения AT-команд с использованием старого телефона Sony Ericsson.
Отправка и запись в / из телефона не представляет никаких проблем, однако я хотел бы иметь возможность приостановить свою функцию SendATCmd и подождать, пока компонент COM-порта не уведомит меня о событии уведомления, а затем снова возобновить функцию SendATCmd.
Сценарий: я хочу получить количество SMS-сообщений в телефоне.
Обычно я просто скажу телефону: эй, сколько у тебя SMS-сообщений?
и телефон ответит в уведомлении.
Это все хорошо.
Но я действительно хочу сделать что-то вроде
if SendATCmd('CountSMS')>0 then
for 0 to SMSCount do
AddSMSToList;
Код для SendATCmd выглядит следующим образом:
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;
Я пытался использовать цикл while, паузу и т. Д. И т. Д., Но ничего не сработало, кроме одной вещи, и именно тогда я поставил ShowMessage там, где должна быть пауза.
Я не знаю, как ShowMessage работает внутри, но кажется, что он не останавливает программу, как цикл while и pause do.
====================
Исправлено.
Все, что мне нужно было сделать, это добавить формы в предложении использования, а затем я добавил, пока fTMPATResult.Full = false do Application.ProcessMessages; в той части, где я хотел приостановить процедуру.
«fTMPATResult» - это переменная, в которой хранятся входящие данные COM-порта, глобально внутри компонента.