View Full Version : WaitForMultipleObjects
ciao mi potete dare una mano,
sto provando ad usare la "WaitForMultipleObjects" per attendere
l'evento di scrittura su di un socket
faccio cosi ma la WaitForMultipleObjects nonsi ferma e cicla sempre
//array di handle dell'evento
HANDLE hnd_eventsck[2];
//creo gli eventi
hnd_eventsck[0] = WSACreateEvent();
hnd_eventsck[1] = CreateEvent(NULL,true,false,NULL);
//associo a questo evento la scrittura sul socket
WSAEventSelect(s_client,hnd_eventsck[0],FD_WRITE);
while(true){
//attendo che si verifichi un evento
switch (WaitForMultipleObjects(2, hnd_eventsck, FALSE, INFINITE)){
case WAIT_OBJECT_0:
//evento 1
break;
case WAIT_OBJECT_0+1:
//evento 2
break;
}
}
ciao zelig
Come mai usi 2 eventi ?
Poi perchè non usi WSAWaitForMultipleEvents ?
ciao
ne uso due perchè un altro mi serve in seguito
da richiamare com PulseEvent(), ma non l'ho ancora implementato
ho gia provato la WSAWaitForMultipleEvents , ma non si ferma ugualmente
Definisci gli eventi separati...
Uno usalo con WSAWait... e l'atro con Wait...
ma poi dovrei usare il WaitForSingleObject?
ma poi un non bloccherebbe l'esecuzione dell'altro?
mi faresti un esempio?
Fammi capire ma per te o l'uno o l'altro evento vanno bene comunque ?
Non hai una sequenza in cui si verificano ?
Altra cosa, non puoi usare la select per verificare l'arrivo di dati e fare un WaitForSingleObject con un timer finito sull'altro evento ?
Sinceramente non ho mai usato i WSAEvent, ma ho sempre usato la programmazione socket standard con la select per effettuare recv non bloccanti...
prefrivo non usare la select
poi non c'è una sequenza fissa in cui si possono verificare i due eventi.
praticamente io ho un server in ascolto
questo server aprirà un thread per ogni client che si collega
ed in questo threads devo gestire i due eventi
uno sarebbe proprio la scrittura del socket e volevo usare il Waitevent in modo da non rendere bloccante la recv
poi l'altro evento dovrebbe scatenarsi all'esterno di questo thread quando si verifica una certa condizione e richiamo la
PulseEvent(id secondo evento)
farò qualche alta prova
grazie
Il problema è che non credo che un evento realtivo ai socket possa essere usato con WaitForMultipleObject (nella documentazione questo uso non è presente)...
Potresti usare WSAEventSelect al posto della select...
ma come puoi vedere nell'esempio del primo post uso gia
WSAEventSelect per creare l'evento
forse per i socket è meglio usare WSAWaitFomultipleEvents al posto di
WaitForMultipleObjects ?
Ma il problema è sempre lo stesso...non puoi controllare entrambi gli eventi insieme...
facendo alcune prove adesso la WSAWaitForMultipleEvents sembra funzionare solo se si scatenano entrambi gli eventi,
anche avendo specificato come terzo parametro FALSE
(questo paramtetro è quello con cui si specifica se aspettare che tutti gli eventi si verificano).
io ho specificato apposta FALSE perchè basta aspettare che uno degli eventi si verifichi, ed invece non sembra comportarsi così?
idee? suggerimenti?
grazie
risolto
ho usato la WaitForMultipleObject e funziona benissimo
grazie
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.