Форум программистов, компьютерный форум CyberForum.ru

Подключить устройство через COM-порт и отправить на него данные - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Программа для печати всех файлов из указанной папки http://www.cyberforum.ru/cpp/thread110488.html
Добрый день! Весь интеренет облазил не могу найти прогу которая будет печатать файл попадающий в указанную папку и после печати удалять его( Я сам не программист, и поэтому прошу Вас если можете напишите эту программку... Если найдутся добрые люди вышлите ее на мой e-mail пожалуйста: lemuriec@bk.ru. С уважением, lemuriec.
C++ Хороший или плохой тон программирования вот в книгах читаю что гото туфта полная..на форуме тоже так говорят,а почему?очень нужная вещь,иногда лучше использовать это чем циклы http://www.cyberforum.ru/cpp/thread109667.html
книга Windows 2000 API Р.Саймон где скачать диск с программами? C++
книга Windows 2000 API Р.Саймон где скачать диск с программами который идет к книге?
Календарь C++
Дни недели пронумерованы следующим образом: 1 — понедельник, 2 — вторник, ... , 6 — суббота, 7 — воскресенье. Дано целое число K, лежащее в диапазоне 1–365, и целое число N, лежащее в диапазоне 1–7. Написать программу, которая определяет номер дня недели для K-го дня года, если известно, что в этом году 1 января было днем недели с номером N. Входные данные Со стандартного потока ввода вводится...
C++ Как сделать сохранение? http://www.cyberforum.ru/cpp/thread109203.html
как сделать сохранение всех сточек в текстовый файл для этой программы? подскажыте...
C++ Текст плеера дайте текст плеера! подробнее

Показать сообщение отдельно
Lolcht0
123 / 121 / 5
Регистрация: 30.03.2009
Сообщений: 766
04.04.2010, 16:21     Подключить устройство через COM-порт и отправить на него данные
В общем, проблема не в том, что потоковая функция зависает в цикле, а в том, что зависает сама ReadFile, ожидая чего-нибудь от ком-порта. Для того, чтобы прервать ожидание, из основного потока перед
C++
1
 DWORD dwResult = WaitForSingleObject(hThread, INFINITE);
но после
C++
1
SetEvent(hEvent);
необходимо отменить чтение: CancelIoEx

Добавлено через 5 минут
хотя это тоже не до конца правильно решение....

Добавлено через 20 минут
правильное решение:
1.
C++
1
2
3
4
5
6
 
CRITICAL_SECTION sect;
int main()
{
   InitializeCriticalSection(&sect);
...
2.
C++
1
2
3
4
5
6
 
EnterCriticalSection(&sect);
SetEvent(hEvent);
CancelIoEx(hCom,0);
СloseHandle(hCom);
LeaveCriticalSection(&sect);
3.
C++
1
2
3
EnterCriticalSection(&sect);
LeaveCriticalSection(&sect);
ReadFile(hCom, &sReceivedChar, 1, &iSize, 0);
данное решение гарантирует, что в случае завершения потока или произойдет выход по Event, или чтение прервется по CancelIOEx, или чтение не начнется, т.к. порт уже будет закрыт, и тогда начнется следующая итерация цикла, на которой будет выполнен выход по Event
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru