![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
VID |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 4.10.2004 Где: Новосибирск Репутация: нет Всего: нет |
Привет!
Появилась проблема с чтением данных с сокета, в режиме SOCK_DGRAM (без соединения) через функцию WSARecvFrom. Я читаю с указанием адреса процедуры завершения, которая должна будет вызваться системой при окончании приема датаграммы, но не вызывается ![]() Может кто сталкивался с подобной проблемой. MSDN примеров на эту тему не дает, инет тоже не кишит подобной информацией. Ниже привожу код, что и как вызывается. Прога - консольное приложение, далее планируется всю начинку запихнуть в dll
Далее в другом месте посылаем сообщение в порт 68. В блокирующем режиме я его получаю, а в неблокирующем функция обратного вызова CompletionRoutine не вызывается ![]() |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 2 Всего: 110 |
а где происходит ожидание прочтения?
а то он только начал читать, а программа переходит на closesocket, WSACleanup и вообще завершает процесс... -------------------- qqq |
|||
|
||||
VID |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 4.10.2004 Где: Новосибирск Репутация: нет Всего: нет |
Мда, тут я урезал программку, поэтому некрасиво получилось, грубо говоря там бесконечный цикл перед закрытием сокета, то есть примерно так:
Примерно так это выглядит, на деле сложнее, но суть не меняется я просто ожидаю. Делал и в отдельном потоке прослушивание совета и т.д и т.п, но результат один. |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 2 Всего: 110 |
на самом деле всё именно зависит от того, как ждать
если бы Windows прерывала поток в любом месте и выполняла бы CompletionRoutine, наверняка, рано или поздно бы произошёл сбой - никакой ведь синхронизации поэтому делается по-другому: процедура окончания вызывается только, если поток находится в прерываемом состоянии для этого можно использовать, например, функцию SleepEx -------------------- qqq |
|||
|
||||
VID |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 4.10.2004 Где: Новосибирск Репутация: нет Всего: нет |
maxim1000 спасибо, на самом деле так и оказалось. Я и думать забыл про синхронизацию
![]() Спасибо. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |