/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Visual c++
Fra : Esben Jensen


Dato : 20-05-01 10:04

Hej Jeg laver et kald til en dll i mit c program vha. af en simpel button,
men når jeg kalder funktionen inden det foregående kald er færdigt fryser
mit program, hvordan blokerer jeg for kald??




 
 
Thomas Lykkeberg (20-05-2001)
Kommentar
Fra : Thomas Lykkeberg


Dato : 20-05-01 10:36

On Sun, 20 May 2001 11:04:27 +0200, "Esben Jensen" <esj@mail.dk>
wrote:

>Hej Jeg laver et kald til en dll i mit c program vha. af en simpel button,
>men når jeg kalder funktionen inden det foregående kald er færdigt fryser
>mit program, hvordan blokerer jeg for kald??

Jeg er ikke helt med på havd du laver men jeg går ud fra at du kalder
en funktion i din DLL i ::ButtonClick()? Det skulle i sig selv være et
blokerende kald, med mindre din DLL på en eller anden måde opretter en
"tråd" til at håndtere dette ekelte kald (usandsynligt?). Jeg bruger i
øjeblikket selv en kommunikations DLL jeg selv har lavet (ikke
multithreaded) som jeg kalder fra ::ButttonClick(), men her har jeg
valgt at placere alle kald til DLL'en i en tråd for sig, således hele
mit GUI ikke fryser når jeg venter på at kaldet returnerer.

Håber jeg forstod dit spørgsmål korrekt

/Thomas

Thomas Krog (20-05-2001)
Kommentar
Fra : Thomas Krog


Dato : 20-05-01 22:05

Du kan bruge CRITICAL_SECTION objekter fra win32api til at sikre at kun een
tråd af gangen tilgår en bestemt resource.

Først opretter du eet CRITICAL_SECTION objekt.
CRITICAL_SECTION cs;
InitializeCriticalSection(&cs);

derpå giver du &cs (lpcs) til alle de tråde det drejer sig om.

Hver tråd skriver nu:
EnterCriticalSection(lpcs);
// udfør de ting som ikke må gøres samtidig
LeaveCriticalSection(lpcs);

Ved programmets afslutning bruger du:
DeleteCriticalSection(lpcs);



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste