Hallo,
ich habe einen kleinen Server gebastelt, der Daten empfängt und sendet. Kommen die Pakete kurz hintereinander (2 ms), wird das zuspätgekommene Paket vergessen.
Dazu hab ich mal ein kurzes compilefähiges Codestückchen gebastelt. Die langen Sleepzeiten kommen daher, dass kurze nicht gehen Also zumindest bei mir vergisst er 4 Events.
Kann mir jemand sagen, wie ich alle Events bekomme?
Danke - Gruß Bobbin.
ich habe einen kleinen Server gebastelt, der Daten empfängt und sendet. Kommen die Pakete kurz hintereinander (2 ms), wird das zuspätgekommene Paket vergessen.
Dazu hab ich mal ein kurzes compilefähiges Codestückchen gebastelt. Die langen Sleepzeiten kommen daher, dass kurze nicht gehen Also zumindest bei mir vergisst er 4 Events.
Code:
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
bool bRunning = true;
#define ARRAYSIZE 10
WSAEVENT EventArray[ARRAYSIZE];
void receiver (void) {
signed long dwWait = 0;
while (bRunning) {
dwWait = WSAWaitForMultipleEvents(ARRAYSIZE, EventArray, FALSE, WSA_INFINITE, FALSE);
WSAResetEvent(EventArray[dwWait - WSA_WAIT_EVENT_0]);
if (bRunning)
printf(" %d catched\n",dwWait);
Sleep(20);
}
ExitThread(0);
}
int main(int argc, char* argv[])
{
// WSA anstarten
WSADATA wsaData;
if (WSAStartup(0x202,&wsaData) == SOCKET_ERROR) {
fprintf(stderr,"WSAStartup failed with error %d\n",WSAGetLastError());WSACleanup();return -1;
}
// Events erzeugen, zurücksetzen
for (int i = 0; i < ARRAYSIZE; i ++) {
EventArray[i] = WSACreateEvent();
WSAResetEvent(EventArray[i]);
}
// Thread starten, abwarten
unsigned long tid;
CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE) receiver, NULL, 0, &tid );
Sleep(10);
// Events der Reihe nach setzen
for(int j = 0; j < ARRAYSIZE; j++) {
printf("Set %d ...",j);
WSASetEvent(EventArray[j]);
Sleep(10);
}
Sleep(10);
// Receiver beenden
bRunning = false;
SetEvent(EventArray[1]);
WSACleanup();
char c;
printf("\n\npress any key\n");
int y = scanf("%c", &c);
return(0);
}
Kann mir jemand sagen, wie ich alle Events bekomme?
Danke - Gruß Bobbin.