2010-04-18 1 views
0

У меня есть серверное приложение с такой структурой: Существует один объект, назовите его сервером, который в бесконечном цикле прослушивает и принимает соединения. У меня есть класс потомков из CAsyncSocket, который перегрузил событие OnReceive, назовите его ProxySocket. Также у меня есть пул потоков с созданными ранее потоками.Проблема CAsyncSocket и ThreadPool

Когда соединение получено объектом сервера, он принимает новое соединение на новый объект ProxySocket. Когда данные поступают в ProxySocket, он создает объект команды и передает его пулу потоков. В этом командном объекте я передаю дескриптор сокета ProxySocket. Когда создается новый объект команды - я создаю новый Socket в рабочем потоке и прикрепляю к нему дескриптор.
Моя проблема следующая: Когда команда заканчивается, сокет не закрывается, я просто отсоединяю его и устанавливаю дескриптор CSocket в значение INVALID_SOCKET, как и планировалось. Но мой первый объект ProxySocket не получает сообщения о новых приемах данных после этого. Как я могу это решить?

ответ

1

Я не думаю, что вы можете использовать объекты CAsyncSocket (или их потомки) в секвенсор пула потоков. CAsyncSockets реализованы поверх WSASsyncSelect - который сообщает winsock отправлять уведомления в дескриптор окна. Поскольку окна имеют сходство потоков, нельзя «переместить» обработку CAsyncSocket в другой поток.