Question

est-il que vous donne le style de réacteur une API Win32 évolutive (comme IOCP pas comme choisir) opérations sur les prises? AFAIK IOCP vous permet de recevoir une notification sur les opérations réalisées comme les données lues ou écrites (proactor) mais je suis à la recherche d'un style de réacteur d'opérations: I besoin d'obtenir une notification lorsque la prise est lisible ou inscriptible (réacteur).

Quelque chose de semblable à epoll, kqueue, /dev/poll?

est-il une telle API Win32? Si oui, où puis-je trouver un manuel sur elle?

** Précision: ** Je dois select comme api pour les sockets qui est aussi évolutive que IOCP, ou je suis à la recherche d'un moyen d'utiliser IOCP dans le réacteur comme opérations

.

Encore plus de clarification: IOCP vous permet de recevoir une notification à la fin de l'opération donnée. Par exemple:

WSARecv(buffer,...); // start reading
WSAWaitForMultipleEvents(...); // wait when read is done

Je reçois Notifications par après opération se fait -. Style proctor des opérations

Qu'est-ce que j'ai besoin est quelque chose comme ça:

WSARecv( NOTHING ); // start waiting for readability (not actual read)
WSAWaitForMultipleEvents(...); // wait until read would not block
// Now WSARecv would not block
WSARecv(buffer,...); // now actual non-blocking read

Comment puis-je faire?

Était-ce utile?

La solution 3

Pas possible.

J'ai vérifié les sources Boost.Asio qui n'ont des opérations de style réacteur et utilisent IOCP. Pour toutes les opérations de style réacteur thread séparé avec select est utilisé au lieu de IOCP.

Autres conseils

Vous voulez regarder WSAAsyncSelect API. Il utilise une file d'attente de messages Windows pour signaler qu'une poignée est lu pour la lecture / écriture / whatever, il ne possède pas les avantages de la concomitance des IOCP, mais il vous permet de mettre en œuvre un modèle de réacteur standard sans avoir une limite au nombre de poignées (comme WSAWaitForMultipleEvents).

Je suis confus, n'est pas reactor où les blocs de thread en attente sur les sources d'événements multiples? Ce serait select (), qui prend en charge les fenêtres. Le modèle est Proactor où il y a un seul rappel par appel, que vous pouvez le faire via ReadFileEx / WriteFileEx.

Avez-vous essayé le passage à zéro nNumberOfBytesToRead, par exemple ReadFile (socket_fd, ..)?

Peut-être vous aidera à obtenir l'événement « PRETE ».

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top