|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Sep 2003
Città: Angri - Milano
Messaggi: 358
|
WaitForSingleObject
Ciao ragazzi,
volevo chiedervi se potevate darmi un aiuto con questa API. Vi descrivo brevemente quelo che faccio io e cosa mi è capitato: Ad un dato evento creo un thread in questo modo: WaitForSingleObject(run_job,INFINITE); //creo il thread DWORD ID; run_job = CreateThread(0,0,run_job_time,gs_record,0,&ID); la prima volta arrivato al "WaitForSingleObject" vede che l'Handle del thread è null e quindi crea e lancia il thread. Però può capitare anzi è molto probabile che capiti che il programma debba creare altri threads ma deve aspettare che sia finito quello precedente (lo stesso), e qui mi capita che alla seconda volta che controlla "WaitForSingleObject" il se siè verificato per esempio 3 volte l'evento che deve generare il tread, appena il primo e terminato mi lancia uno di seguito all'altro i due thread rimanenti invece di lanciare uno e ed aspettare che sia finito per poi lanciare l'altro. Sapreste dirmi perchè? Spero di essere stato abbastanza chiaro. Ciao Zelig |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
A parte che WaitForSingleObject(run_job,INFINITE); è un po' bruttino visto che blocca tutta l'interfaccia della tua applicazione mentre è in attesa.... Io fare un WaitForSingleObject(run_job, 1); e poi con un timer (mettiamo ogni 300 millisecondi) chiamerei questa routine:
Codice:
void CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime)
{
static int count = 0;
static HANDLE run_job = NULL;
DWORD res = WAIT_OBJECT_0;
if(run_job != NULL) res = WaitForSingleObject(run_job, 1);
if(count == 3 && res == WAIT_OBJECT_0)
{
KillTimer(hwnd, idEvent);
return;
}
if(res == WAIT_OBJECT_0)
{
DWORD ID;
run_job = CreateThread(0, 0, run_job_time, gs_record, 0, &ID);
++count;
}
}
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:46.



















