![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| knut |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 7.2.2006 Репутация: нет Всего: нет |
вот обрезанный пример где точно есть наличие проблемы.
ормально кмпилится p.s буду признателен за помпшь Присоединённый файл ( Кол-во скачиваний: 11 )
EventSelectIOModel.rar 19,15 Kb--------------------
|
|||
|
||||
| xvr |
|
||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Да уж, наличие проблемы есть
Далее, передача данных:
Про == вместо != я уже писал:
|
||||||||
|
|||||||||
| knut |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 7.2.2006 Репутация: нет Всего: нет |
xvr,
спасибо тебе за замечание но вот исправленный вариант. но меня убивает то что я не могу понять почему у меня WSAEventSelect е зависает и не как не выxодет. я WSARecive(...) вызвал в main() е у меня рисив нормально прошел. а вот посадить его на ивент не как не получается. не пойму то я не так делаю в организации потоковай модели.? Присоединённый файл ( Кол-во скачиваний: 14 )
EventSelectIOModel.rar 19,69 Kb--------------------
|
|||
|
||||
| xvr |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Убери строку
в конце цикла обработки event'ов в CSocketThread::ThreadProc. Этот event автоматически сбрасывается в WSAWaitForMultipleEvents и снова устанавливается в теле обработки, после чего ты его сбрасываешь вручную и в таком состоянии он остается навсегда :( Кстати, отправка данных по FD_WRITE тоже не будет работать - вот выдержка из описания WSAEventSelect
|
||||||
|
|||||||
| ama_kid |
|
||||||||||||||||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 5 Всего: 95 |
knut,
Эээ... как это так?!
Далее, почему-то везде используются расширения WSA... а тут:
Так же не совсем понятна идея использования массива евентов при вызове WSAEventSelect. В МСДН сказано:
А зачем ты из процедуры потока ThreadProc напрямую обращаешься к объектам CSocket obsocket и tagPACKET opacket без синхронизации? В таком случае - ты никак не защищен от межпотоковых коллизий и порчи данных... Про утечки памяти при таком использовании потока я уж и не говорю (нет выхода из цикла потоковой функции)... Ну и самое интересное: при запуске потока ты инициализируешь на обработку евентов сокет m_hsocket объекта CSocket
Ну и по мелочи - куча недочетов типа: Функция CSocket::OpenSoket возвращает тип bool, а ты пишешь return m_hsocket типа SOCKET. Вообще, складывается такое ощущение, что ты просто натаскал из разных источников куски кода и пытался придать им работающий вид...
-------------------- самурай без меча подобен самураю с мечом, но только без меча |
||||||||||||||||
|
|||||||||||||||||
![]()
|
| Правила форума "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. |