![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| zaytsewa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Всем привет!
Надо реализовать асинхронную работу с компортом. Сделала 2 потока: на чтение и на запись ( с определённым интервалом закидываю данные в порт) Если запускать один поток - он работает - всё ок Если запускать вместе - то работает только тот, которого первым запустили Второму времени видимо не выделяется sleep в потоках не помогает с мьютексами тоже ничего не получилось( попробовала поставить приоритеты - тоже ноль реакции что посоветуете? как выделять потоку квант времени на выполнение? впринципе можно запись и в главном потоке реализовать, чтобы огород не городить... но пока не хочется Это сообщение отредактировал(а) zaytsewa - 13.1.2011, 14:05 |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: нет Всего: 12 |
zaytsewa,
без понимания структуры вашей программы трудно о чем-то сказать. Хотя бы основные фрагменты кода дайте, отвечающие за работу с портом и за синхронизацию потоков. Кроме того, не забывайте, что win-api функции чтения из ком-порта без корректной установки таймаутов способны завесить все, всяк и всячески. Если у вас один из потоков ждет чтения, а данные не приходят, то есть вариант бесконечного нахождения в этом состоянии. Разумеется, если таймауты не выставлены. Если выставлены, то все нормально будет. Добавлено через 3 минуты и 5 секунд
Выделить никак, а принудительно отдать другому - Sleep(0). Это сообщение отредактировал(а) Dreamer_0x01 - 13.1.2011, 16:00 -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| zaytsewa |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
вот основной код
настройки:
|
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Нельзя использовать одну и ту же OVERLAPPED структуру в обоих вызовах (FileRead & FileWrite) одновременно.
Да и вообще использование OVERLAPPED IO в 2х потоках - это бред. OVERLAPPED для того и делалась, что бы можно было обходится без потоков. |
|||
|
||||
| zaytsewa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
т.е. можно прямо в рабочем потоке сделать цикл while и ждать прихода данных? а писать в поток можно в любой момент времени? как узнать занят порт или свободен? надо ли использовать какие-то средства синхронизации? в OVERLAPPED кроме события ничего интересного не нашла, причём событие не пойми чего... просто любого изменения порта? была бы признательна, если бы вы мне всё объяснили или пример привели или ссылку кинули, где всё толково расписано |
|||
|
||||
| xvr |
|
||||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Уберите флаг OVERLAPPED из открытия файла и параметр Overlapped из Read/WriteFile. Потом просто в потоке зовете ReadFile и он блокируется, пока не будет прочтенных данных
|
||||||||||
|
|||||||||||
| zaytsewa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
т.е. можно в одно и то же время писать и читать?? мне почему-то казалось, что можно делать что-то одно в один момент врмемени за ссылку спасибо) |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
||||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |