"SpookiePower" <boxjunk2600@hotmail.com> wrote in message
news:avsdsu$ql4$1@news.cybercity.dk...
> Her er lidt af den kildekode jeg prøver at finde ud af
>
> hSem := CreateSemaphore(nil, 1, 1, nil);
>
> if WaitForSingleObject(hSem, INFINITE) = WAIT_OBJECT_0 then
> begin
> køre en procedure......
> ReleaseSemaphore(hSem, 1, nil);
> end;
Et semaphore object signaleres når der er en "ledig" plads, du kan derfor
f.eks. begrænse antallet af tråde der må afvikles samtidigt.
Jeg ville iøvrigt bruge en try, finally struktur så jeg var sikker på at
releasesemaphore altid blev kaldt.
if WaitForSingleObject(hSem, INFINITE) = WAIT_OBJECT_0 then
try
køre en procedure......
finally
ReleaseSemaphore(hSem, 1, nil);
end;
> Har jeg ret i at = WAIT_OBJECT_0
> betyder at, objektet skal være signal, altså = >1 for at få adgang. ?
Hmmm, jeg jeg tror du misforstår det med WAIT_OBJECT_0. Prøv at se her.
case WaitForSingleObject(hSem, 1000) of
WAIT_OBJECT_0 :
try
køre en procedure......
finally
ReleaseSemaphore(hSem, 1, nil);
end;
WAIT_TIMEOUT : begin
showmessage('Ups timeout');
end;
end;
Her venter jeg på at der skal blive en semaphore "ledig" eller en timeout
(1sek)
> Betyder INFINITE at tiden ikke går, når der står et objekt og venter på at
komme ind ?
> Hvis feks tiden var nævnt i milliSek, ville objektet blive lukket ind når
tiden var gået,
> uanset om objektet var signaled eller non-signaled ?
INFINITE = venter for evigt = laaaaaaang tid
> Når man skriver
> CreateSemaphore(nil, 1, 1, nil)
> Betyder det første 1-tal (lInitialCount) om objektet fra start skal være
signaled eller
> non-signaled ??
>
> Jeg fandet denn forklaring på først 1-tal.
> The count is decreased by one whenever a wait function releases a
thread that was
> waiting for the semaphore. The count is increased by a specified
amount by calling
> the ReleaseSemaphore function.
> Betyder denne forklaring at når der bliver lukket et objekt ind,
Der er kun et object (hSem), dette semaphore object bliver bla. "signaled"
af enten createsemaphore eller releasesemaphore.
så bliver InitialCount
> sat -1, i dette tilfælde betyder det at der ikke er plads til flere
objekter inde i proceduren ?
> Når objektet så er færdigt inde i proceduren, så bliver den released og
InitialCount
> bliver +1 = Signaled, så det næste objekt er klar til at komme ind ??
>
> Næste 1-tal(MaximumCount) forstå jeg ikke helt. jeg har fundet denne
forklaring -
> Specifies the maximum count for the semaphore object. This value must be
greater than zero.
> Betyder det hvor mange der max må være inde og køre proceduren ?
Jeps
det er hele idén, skal du derimod begrænse til max 1 så brug en
mutex eller en critical section
Semaphore, når den bliver snuppet i waitforsingleobject bliver tælleren talt
x ned og når den er færdig tælles tælleren x op.
håber det hjælper lidt!
mvh
Henry