Purebasic 4.30 Beta 1 est arrivé..haaaaaaaaaarg

Vous avez développé un logiciel en PureBasic et vous souhaitez le faire connaitre ?
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Un exemple de Freak montrant comment utiliser les fonctions semaphore.
Freak a écrit : A semaphore is a synchronisation object with a counter.
SignalSemaphore() increases that count, WaitSemaphore() decreases it.
If WaitSemaphore() would cause the count to drop below 0, it will block and wait until another SignalSemaphore() call is made.

Here is an example, where a semaphore is used to protect a queue from running out of elements:

Code : Tout sélectionner

Global NewList Queue.l()
Global *Semaphore = CreateSemaphore(0)   ; to guard against an empty queue
Global *Mutex     = CreateMutex()        ; there is still need for a normal mutex to sync list commands

Procedure ProducerThread(Dummy)

  For i = 1 To 100       
    Debug "Enqueueing: " + Str(i)
 
    ; add a new element at the queue end
    LockMutex(*Mutex)
      LastElement(Queue())
      AddElement(Queue())
      Queue() = i     
    UnlockMutex(*Mutex)
   
    ; signal that an element was added (increase semaphore count)
    SignalSemaphore(*Semaphore)
   
    ; simulate some work   
    Delay(Random(200))
  Next i

EndProcedure

Procedure ConsumerThread(Dummy)

  For i = 1 To 100
 
    ; Wait for something to be in the queue.
    ; If count > 0, decreases count and returns immediately
    ; If count = 0, wait for another SignalSemaphore()
    WaitSemaphore(*Semaphore)
   
    ; Read the head element from the queue
    LockMutex(*Mutex)
      FirstElement(Queue())
      x = Queue()
      DeleteElement(Queue())
    UnlockMutex(*Mutex)
   
    Debug "Dequeued: " + Str(i)
   
    ; simulate some work
    Delay(Random(200))
  Next i

EndProcedure

*Consumer = CreateThread(@ConsumerThread(), 0)
*Producer = CreateThread(@ProducerThread(), 0)

WaitThread(*Consumer)
WaitThread(*Producer)

End
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
Ouaf-Ouaf
Messages : 212
Inscription : dim. 11/juil./2004 9:07

Message par Ouaf-Ouaf »

Aïe !

Dans deux jours je pourrais tester. Je comptais profiter de voir mon père pour tester la compatibilité de mon prog sur mac ..

Windowoutput() est declaré comme indispo pour mac. :(
Je suis tombé sur un post qui explique comment utiliser l'API mac, mais il avait pas l'air super concluant.
Cls
Messages : 620
Inscription : mer. 22/juin/2005 8:51
Localisation : Nantes

Message par Cls »

N'oublions pas qu'il s'agit d'une bêta. Ces bugs seront certainement corrigés pour la version finale. Ça reste préoccupant !
Il faut en parler à Fred le plus tôt possible..
Répondre