Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2013, 17:27   #11
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

Что если после WaitCommEvent вставить Sleep(1)? Для пробы... Или INFINITE заменить на какую-нибудь реальную задержку?

Последний раз редактировалось FataLL; 28.05.2013 в 17:31.
FataLL вне форума Ответить с цитированием
Старый 28.05.2013, 17:31   #12
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Цитата:
Что если после WaitCommEvent вставить Sleep(1)?
Нуль внимания, фунт презрения.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 28.05.2013, 17:37   #13
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

А INFINITE поменять, скажем, на 100 или 200?
FataLL вне форума Ответить с цитированием
Старый 28.05.2013, 17:43   #14
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Цитата:
А INFINITE поменять, скажем, на 100 или 200?
Так же глухо.
Должно же где-то на поверхности лежать простое и лаконичное решение, блин...
Цитата:
И ещё вот это EV_RXFLAG в SetCommMask
Передача данных сдохла полностью =)
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 28.05.2013, 18:09   #15
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

А если всё в отдельном потоке, может не открывать порт в режиме OVERLAPPED? Пусть WaitCommEvent вернёт значение, когда действительно что-то придёт... Не?
FataLL вне форума Ответить с цитированием
Старый 29.05.2013, 06:58   #16
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Нельзя, информация не только принимается, но и может отправляться (по требованию). Причем отправление происходит верно.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 29.05.2013, 07:46   #17
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Откуда такая щепетильность к парочке тактов? Что за задача такая?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.05.2013, 08:24   #18
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Прием/передача данных между GUI и устройством по RS485.

Возможно я неправильно уяснил для себя назначение ovarlapped, исходя из этого мануала.
Как я понимаю, если будет неперекрываемая операция, то управление в программу не вернется, пока операция не будет выполнена. Соответственно может(?) подвиснуть GUI.
Или я не так все понял, и в масштабах сом-порта эти задержки пренебрежимо малы?
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 29.05.2013, 09:03   #19
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Я бы относился к этому мануалу поосторожней.
Автор предлагает нам воспользоваться overlapped I/O только для того, чтоб блокировать поток ожиданием. Зачем это нужно - не понятно, если все используемые функции (WaitCommEvent, ReadFile, WriteFile) могут ожидать сами.
Далее, чтение из COM порта выполняется по сигналу а запись - нет. Ну и где здесь логика?

Все, что нужно, это поток для чтения/записи и правильные COMMTIMEOUTS и никаких "перекрывемых" операций не надо.
waleri вне форума Ответить с цитированием
Старый 29.05.2013, 09:14   #20
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Т.е. следующая конструкция потока чтения должна корректно работать (при условии открытия порта без флага FILE_FLAG_OVERLAPPED)?
Код:
WaitCommEvent(hCom,&mask,NULL);
if((mask & EV_RXCHAR) != 0) {
ClearCommError(hCom,&temp,&comstat);
}
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как влияет музыка на человека Ёжик в тумане Свободное общение 26 01.11.2012 15:03
Как изменить ширину картинки на фоне? Try HTML и CSS 0 16.09.2009 22:57
Картинка на фоне MDI формы... Как? masterdela Общие вопросы Delphi 4 13.01.2009 14:41