Frage

Gibt es eine skalierbare Win32-API (wie IOCP nicht wie wählen), die Sie Stil Reaktor gibt Operationen an Steckdosen? AFAIK IOCP können Sie Benachrichtigung über die ausgeführten Operationen erhalten wie Daten (proactor) gelesen oder geschrieben, aber ich bin für Reaktor Stil von Operationen: I Notwendigkeit Benachrichtigung zu erhalten, wenn der Socket lesbar oder beschreibbar (Reaktor).

Etwas ähnliches wie epoll, kqueue, /dev/poll?

Gibt es eine solche API in Win32? Wenn ja, wo kann ich ein Handbuch auf ihn finden?

** Zur Verdeutlichung:. ** Ich brauche wie api für Steckdosen select, die so skalierbar wie IOCP ist, oder ich bin auf der Suche nach einem Weg, IOCP wie Operationen in Reaktor zu verwenden,

Noch mehr Klarstellung: IOCP können Sie eine Benachrichtigung nach Abschluss der gegebenen Operation erhalten. Zum Beispiel:

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

Also ich notication erhalten, nachdem Betrieb erfolgt -. Proctor Art von Operationen

Was ich brauche, ist etwas wie folgt aus:

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

Wie kann ich das tun?

War es hilfreich?

Lösung 3

Nicht möglich.

Ich habe Boost.Asio Quellen überprüft, die Reaktor Stil Operationen haben und IOCP verwenden. Für alle Reaktor Stil Operationen separater Thread mit select anstelle von IOCP verwendet.

Andere Tipps

Sie möchten auf der WSAAsyncSelect API. Es verwendet eine Windows-Nachrichtenwarteschlange zu signalisieren, dass ein Griff für Lese- / Schreib-Lese / was auch immer, so dass es nicht die Gleichzeitigkeit Vorteile von IOCP hat, aber es ermöglicht es Ihnen, einen Standard-Reactor zu implementieren, ohne eine Begrenzung der Zahl des mit Griffe (wie WSAWaitForMultipleEvents).

Ich bin verwirrt, ist nicht Reactor, wo die Gewindeblöcke auf mehreren Ereignisquellen warten? Das wäre select (), die Windows unterstützt. Das Proactor ist, wo es ein einziger Rückruf pro Anruf ist, dass Sie über ReadFileEx / WriteFileEx tun können.

Haben Sie versucht, übergibt keine nNumberOfBytesToRead an, zum Beispiel ReadFile- (socket_fd, ..)?

Vielleicht wird es helfen, die „lesen ready“ Ereignis zu erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top