Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.12.2014, 14:37
Jury_yamal Jury_yamal вне форума
Прохожий
 
Регистрация: 04.11.2014
Сообщения: 8
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию как внутри функции дождаться срабатывания другой процедуры

Добрый день.
Подскажите новичку есть ли возможность внутри одной из процедур дождаться срабатывания процедуры прихода байтов из компорта.
процедура срабатывания прихода байтов в модуле компорта описана как
Код:
TReadEvent = procedure(Sender: TObject; ReadBytes: array of Byte; CRC_Err:Boolean;RW_Reguest:Byte) of object;
published
  property OnRead: TReadEvent read FReadEvent write FReadEvent;
в основном модуле она описана как:
Код:
procedure FOnRead(Sender: TObject; ReadBytes: array of Byte;
      CRC_Err: Boolean; FR_Reguest:Byte);
далее в implementation
Код:
  var
    Port:TComPort;
далее в конструкторе текущего модуля
Код:
 Port:=TComPort.Create(PortComName,BaudRateCom);
  Port.OnRead := FOnRead;

Далее есть функция
Код:
function TMR.FReadHoldingRegistr(ID, CodeFunction, RegistrAdress, SizeDataField: Byte): Single;
  var
    WriteCOm: array [0..7] of Byte;
begin
......
Port.Write(WriteCOm,0);
В этом месте нужно дождатся срабатывания процедуры прихода байтов из компорта, которое и установит поле  FSingle.
Result:=FSingle;
В данный момент она сначала выходит из функции (соответственно результат 0,000), а только затем срабатывает процедура прихода байтов из порта. подскажите что переделать или как изменить код чтобы все работало.
Ответить с цитированием
  #2  
Старый 07.12.2014, 17:57
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

1. синхронный (блокирующий) режим
2. SetEvent / WaitForSingleObject
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 07.12.2014, 18:39
Jury_yamal Jury_yamal вне форума
Прохожий
 
Регистрация: 04.11.2014
Сообщения: 8
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

а можно пример?
Ответить с цитированием
  #4  
Старый 08.12.2014, 05:18
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

А может после записи в порт попробовать запустить небольшой слип, а потом выполнить чтение из?

З.Ы. Кстати, используя обычную апишную связку GetCommState/SetCommState подобной ситуации не наблюдается, приёмо-передача работает нормально даже в рамках одной процедуры...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:05.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025