зы: устройство, с которым ведётся обмен, должно быть настроено также как и COM-порт. Точнее наоборот: COM-порт нужно настроить в соответствии с устройством.
ReadFile я так понял теже параметры имеет, только естественно функцию другую выполняет, но тут заковыка как отловить приход ответа, то есть как организовать сам цикл ожидания и немедленную реакцию на приход символов?
Тут как и всегда есть много способов.
Один из самых прямых, без использование сложных механизмов,
Код:
while(1) { Sleep(500);//спим пол секунды чтобы не загружать процессор int cout_of_read = ReadFile(...);//читаем один символ if(count_of_read) break; } вот примерно
тот код который поможет ожидать символ.
другой способ это установки маски ком порта на ожидание символа, который мона установить в DCB структру отвечает поле EvtChar какой именно символ, далее функция WaitCommEvent(hFile,&flag,0); где DWORD flag=EV_RXFLAG, Указатель я думаю для интерактивности с потоками, ну это не важно, данную функцию можеш посмотреть в МСДНе поподробнее.
ну и третий который я знаю и самы лучший как я думаю(так как поток не блокируется и ожидание моментальное) это с перегрузкой файла, OVERLAPPED, примера кода с сабой нету , вспоминать неочень могу ошебится. Помню что если открытьфайл и указать структуру OVERLAPPEDто функции ReadFile и WriteFile будут неблокироваться, а исолняться моментально, не пытаясь выполнить поставленную задачу, ну а в структуре OVERLAPPED будет HANDLE event, который мона использовать для ожидания, тоесть примерно это выглядело так
Код:
OVERLAPPED ov; ov.hEvent = CreateEvent(0,0,0,0); HANDLE my_event_to_terminate= CreateEvent(0,0,0,0); HANDLE handles[2]={overlapped.hEvent ,my_event_to_terminate}; ... здесь гдето инициализация и всё такое ... while(1) { ReadFile(...);// чиатем символ или буфер в зависимости от задачи int i_wait_event = WaitForMultipleObjects(2,handles,false,-1); if(i_wait_event==1) break; // гдето в другом потоке выполнелся код SetEvent(my_event_to_terminate); ... //агоритм сбора получаемых данных (в неём обычно есть критерии для выхода из цикла например количество прочитаных байт либо прочитан спец символ) .. }
Member
Статус: Не в сети Регистрация: 11.07.2004 Откуда: Воронеж
mcgeenerman писал(а):
int cout_of_read = ReadFile(...);//читаем один символ
я так понял тут читается символ в буфер и в переменную cout_of_read записывается число считанных символов?
mcgeenerman писал(а):
if(count_of_read) break;
а тут я не совсем понял что происходит, по логике если cout_of_read равна единице то остановка цикла?
зы: cout_of_read и count_of_read разные переменные или ты ошибся?
Member
Статус: Не в сети Регистрация: 12.12.2003 Откуда: Уфа
Я уже писал, что пользуюсь классами библитеки QT, в частности QPoint и QPolygon. QPolygon - наследуется от vector<QPoint> - что логично, то есть он завязан на QPoint. Пару дней назад выяснил, что оператор сравнения, определенный для QPoint работает не всегда, хотелось бы его перегрузить, но так чтобы не перекомпилировать всю библиотеку и в то же время чтобы он работал как для просто QPoint, так и для элементов QPolygon. Можно ли это как-нибудь сделать?
Member
Статус: Не в сети Регистрация: 14.01.2004 Откуда: Киев, Украина
Ну допустим можно, но какие есть гарантии того, что везде будет отрабатывать твой оператор? Это раз, во-вторых если библиотекта уже собрана, перегружай хоть по нескольку раз - толку 0.
Member
Статус: Не в сети Регистрация: 12.12.2003 Откуда: Уфа
Тупо переписал оператор, выдает ошибку, что operator already has a body. То есть выхода никакого из этого нет? А то неудобно в каждом условии писать длинное выражение. А целостность библиотеки нарушать тоже неохота.
Добавлено спустя 1 час, 4 минуты, 42 секунды че-то я стормозил просто написал функцию, ей и пользуюсь).
Добавлено спустя 6 часов, 15 секунд Сейчас прочитал, что на Паскаль и С - первые языки высокого уровня, на которых били написаны компиляторы самих себя. Вопрос, а чем тогда компилировались исходные тексты компиляторов??
Member
Статус: Не в сети Регистрация: 09.08.2005 Откуда: Земля
Люди хелп, помогите дописать прогу по структурам
Условие:
шаблонн STUDENT
...-NAME фамилилия и инициалы(симв массив)
...-GROUP номер группы(int)
...-SES успеваемость, массив из 5 эл(int)
Написать прогу:
1 Вввод с клавы данных в массив stud1, состоящий из 10 эл-ов типа STUDENT
2 Вывод на экран:
..* Всей инфы по возрастанию поля GROUP
..* Вывод на дисплей фамилий и номеров групп для всех студентов, если средний бал студента больше 4.0, если таких нет то сообщить об этом
Пока только такие шаги (создание и заполнение структуры):
Member
Статус: Не в сети Регистрация: 12.12.2003 Откуда: Уфа
Такой вопрос, может кто-нибудь знает, в c# при ипользовании оператора присваивания для поля класса, и при обращении к нему есть ли такая возможность задавать методы set и get? Чтобы как в C++ не мучатся с шаблонами?
Member
Статус: Не в сети Регистрация: 12.12.2003 Откуда: Уфа
Появился вопрос. Скорее он по алгоритмам, нежели по языку. Есть структура данных, в виде дерева(то есть есть один или несколько root-items, и в них вложены другие). Для элемента дерева выполняется соотношение item<parentItem. Все элементы лежат в контейнере. Можно ли как-то отсортировать их по иерархии? Нужно учитывать, что могут быть параллельные ветви, при этом "двоюродные" элементы, то есть находящиеся на одной ступени иерархии, но имеющие разных родителей в отсортированном контейнере должны лежать друг за другом, а только после них - их "дети".
Есть ли какие-то стандартные алгоритмы для этих целей, и где можно почитать про это? Просто не хочется выдумывать велосипед
Member
Статус: Не в сети Регистрация: 12.12.2003 Откуда: Уфа
Билли Бонс Да я думал над этим, проблема в том, что условие < выполняется только для элемента и его родителя(прародителя, прапрародителя ...) А допустим для элемента и его "дяди" оно не выполняется, а нужно, чтобы после сортировки дядя был выше чем его племянник(то есть дядя должен быть вместе с родителем элемента).
Ну да ладно в общем-то я уже придумал рекурсивный алгоритм для этого) Добавлено спустя 1 час, 7 минут, 17 секунд Билли Бонс Весь вечер вчера думал над этим алгоритмом сортировки:) Что самое интересное оказалось, логика моей программы такова, что исходные данные получаются уже сортированными в любом случае Вот так тоже получается А так бы сам алгоритм сортировки был ресурсоемким, ди и еще операция сравнения двух элементов на больше-меньше тоже содержит в себе целый цикл.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения