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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2011, 21:08   #1
sluge
Новичок
Джуниор
 
Аватар для sluge
 
Регистрация: 23.01.2011
Сообщений: 5
По умолчанию Работа с HANDLE из разных потоков

Я пишу приложение для работы с сом портом, у меня в приложении два потока, один главный, а второй сидит на WaitCommEvent и ждет поступления данных в порт. Как только данные приходят, второй поток дает команду первому вызвать ReadFile для считывания данных. Так вот проблема в том что второй поток посылает сигнал и потом снова ждет новых данных на вызове WaitCommEven, а первый поток читает данные, вернее начинает читать но вызов ReadFile навечно зависает, так как видимо оба потока используют один и тот же разделямый ресурс. У кого нибудь есть идеи, как это можно разрулить?
sluge вне форума Ответить с цитированием
Старый 23.01.2011, 21:26   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Скорее ReadFile() пытается прочесть больше данных, чем пришло.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 24.01.2011, 06:03   #3
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Цитата:
Сообщение от veniside Посмотреть сообщение
Скорее ReadFile() пытается прочесть больше данных, чем пришло.
с чего бы это, интересно? Если бы данных не было, РидФайл вернула -1(или 0 не помню точно) и все тут.
Для ТС: кидайте бинарник программы, посмотрим, что это может быть ибо гадать можно очень долго
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 24.01.2011, 06:59   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

неа, не всё так просто

Цитата:
When reading from a communications device, the behavior of ReadFile is determined by the current communication time-out as set and retrieved by using the SetCommTimeouts and GetCommTimeouts functions. Unpredictable results can occur if you fail to set the time-out values. For more information about communication time-outs, see COMMTIMEOUTS.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 24.01.2011, 09:57   #5
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Хммм ну да, с копипастой спорить глупо.
Однако на саму программу посмотреть таки тоже бы не помешало, глядишь чего-нибудь и придумалось.
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 24.01.2011, 10:06   #6
sluge
Новичок
Джуниор
 
Аватар для sluge
 
Регистрация: 23.01.2011
Сообщений: 5
По умолчанию

параметры таймаутов заданы так чтобы ReadFile сразу возвращал управление
sluge вне форума Ответить с цитированием
Старый 24.01.2011, 10:07   #7
sluge
Новичок
Джуниор
 
Аватар для sluge
 
Регистрация: 23.01.2011
Сообщений: 5
По умолчанию

а бинарник то вам зачем?
sluge вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с файлом из нескольких потоков boris-blade Общие вопросы .NET 2 02.04.2010 17:21
Передача параметров обьектам из разных потоков(работа с Thread) B@ND!T Общие вопросы .NET 2 27.01.2010 23:37
Как узнать handle окна имея handle обного из его компонентов SeRhy Win Api 2 18.10.2009 19:31
Как имея handle окна узнать handle edit-a который находится в етом окне SeRhy Общие вопросы Delphi 1 20.07.2008 13:48