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

Как избавиться от остановки программы из-за функции recv()? - C++

Восстановить пароль Регистрация
 
AntiAlianKiller
1 / 1 / 0
Регистрация: 08.05.2013
Сообщений: 14
02.08.2013, 01:59     Как избавиться от остановки программы из-за функции recv()? #1
Я пишу чат на WinSock. Суть его проста - существует цикл, в котором идет такая последовательность действий:
1. Если нажат Enter, то отправляем данные send()
2. Прием данных recv()
3. Анализирование и вывод принятых данных

Все работает правильно, данные анализируются и отправляются без ошибок... Но есть одна проблема:
Как только цикл доходит до функции приема данных recv(), то он останавливается: он не желает продолжать ход программы, пока не будут приняты хоть какие-то данные.
По моей задумке, даже если данные с помощью recv() приняты не будут, ход программы не будет остановлен (Иначе получается, что я не смогу отправить данные, пока их не прийму.)

Так как же исправить это? Была мысль выполнять функцию в отдельном потоке, а принятые данные выводить в качестве глоб. переменной, но тогда прием работать не будет (функции recv() нужны данные о сокете, который объявляется в другом потоке, а перенести его объявление сюда, это значит, что и весь основной код надо перенести сюда, а это все равно, что ничего не менять).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2013, 01:59     Как избавиться от остановки программы из-за функции recv()?
Посмотрите здесь:

C++ Избавиться от "Нажмите любую клавишу..." в конце программы, code::blocks
C++ как переделать массив что бы не было его остановки и как добавить индекс
C++ Обработка функции recv структуры SOCKET
Статический метод как точка входа в поток - как избавиться C++
C++ Как можно было бы избавиться от вызова cin.Get() в каждой функции, работающей с потоком
Сокеты: после вызова send программа зависает на функции recv C++
Защита программы от остановки процесса C++
Как сделать получение текста из консоли, без остановки программы? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
02.08.2013, 02:16     Как избавиться от остановки программы из-за функции recv()? #2
Используйте неблокирующий сокет:

C++
1
2
u_long mode = 1;
ioctlsocket( socket, FIONBIO, &mode );
Praktolock
 Аватар для Praktolock
58 / 58 / 0
Регистрация: 29.11.2011
Сообщений: 272
02.08.2013, 04:48     Как избавиться от остановки программы из-за функции recv()? #3
или использовать WSARecv

Добавлено через 26 секунд
Или запускать recv в отдельном потоке

Добавлено через 32 минуты
Цитата Сообщение от AntiAlianKiller Посмотреть сообщение
функции recv() нужны данные о сокете, который объявляется в другом потоке
Сокет можно создать в потоке который вызывает recv, также можно передать потоку сокет через параметры
Yandex
Объявления
02.08.2013, 04:48     Как избавиться от остановки программы из-за функции recv()?
Ответ Создать тему
Опции темы

Текущее время: 11:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru