Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> подскажите с select, подскажите с select 
V
    Опции темы
hawk3500
Дата 19.1.2012, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 6.2.2009

Репутация: нет
Всего: 2



Здравствуйте.
Подскажите пожалуйста на какое конкретно событие реагирует функция селект?
Вот пример кода:
Код

fd_set ACTIVITY_SOCKET;
WSAData WSADat;
sockaddr_in sin;
SOCKET Sock;
DWORD ThreadD;


DWORD WINAPI EventSelect( LPVOID lpParam ) 
{
    Sleep(100);
..........................................
return 0;
}

main()
{
    WSAStartup(0x0202,&WSADat);
    sin.sin_family = AF_INET; // type address
    sin.sin_addr.s_addr = inet_addr("127.0.0.1");  // IP-address server
    sin.sin_port = htons(1111); // number server port
    Sock=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,NULL,0,WSA_FLAG_OVERLAPPED);//своздаём серверный сокет.
    FD_SET(Sock,&ACTIVITY_SOCKET);
    CreateThread(NULL,0,EventSelect,0,0,&ThreadD);

    select(0,&READY_READ_SOCKET,0,0,0);
BINGO:
...................
}


Не могу понять что нужо вот в таком сслучае сделать в EventSelect чтобы код вышел из бесконечного ожидания.
Пробывал привязывать к Sock Event на read/write и в потоке использовать WSASetEvent...не сработало.
Подскажите механизм работы select.
Заранее благодарен.
С уважением,
 HAWK3500.
--------------------
воин dzen'a
PM MAIL   Вверх
feodorv
Дата 19.1.2012, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



Цитата(hawk3500 @  19.1.2012,  18:19 Найти цитируемый пост)
Подскажите механизм работы select.

Честно говоря, для винсокетов select является своеобразным костылём и введён для совместимости с BSD-сокетами. Вместо этой функции стоит использовать связывание сокета с событием и дальнейшим ожиданием через WSAWaitForMultipleEvents. Такой вариант с пробуждением можно подсмотреть здесь.


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Олег2005
Дата 20.1.2012, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 421
Регистрация: 26.5.2005
Где: Рига Латвия

Репутация: 6
Всего: 11



Цитата(hawk3500 @  19.1.2012,  17:19 Найти цитируемый пост)
 CreateThread(NULL,0,EventSelect,0,0,&ThreadD);

Вы свою функцию EventSelect запускаете в отдельном потоке.
Что там есть - кроме слипа?
Неясна суть алгоритма.

Кроме того, есть TerminateThread

PM MAIL WWW MSN   Вверх
hawk3500
Дата 21.1.2012, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 6.2.2009

Репутация: нет
Всего: 2



Вопрос разрешился.
Заключался в том как используя поток EventSelect вывести основной поток из бесонечного ожидания в selesct.
Всем респект smile Всё вышло smile 
--------------------
воин dzen'a
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0605 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.