====== Différences ====== Ci-dessous, les différences entre deux révisions de la page.
| allegro:threads [2012/03/17 00:57] mrhide [Détails] | allegro:threads [2012/06/29 17:02] (Version actuelle) mrhide [Threads] | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ===== Threads ===== | + | ===== Allegro — Threads ===== | 
| Dans cet article nous allons voir comment utiliser l'interface de threading d'Allegro. | Dans cet article nous allons voir comment utiliser l'interface de threading d'Allegro. | ||
| - | |||
| - | FIXME faire le walktrough | ||
| ==== Exemple basique ==== | ==== Exemple basique ==== | ||
| Ligne 18: | Ligne 16: | ||
| { | { | ||
| ALLEGRO_MUTEX  *mutex; | ALLEGRO_MUTEX  *mutex; | ||
| - | ALLEGRO_COND  *cond; | ||
| ALLEGRO_DISPLAY *display; | ALLEGRO_DISPLAY *display; | ||
| ALLEGRO_BITMAP  *caret; | ALLEGRO_BITMAP  *caret; | ||
| Ligne 26: | Ligne 23: | ||
| { | { | ||
| data->mutex  = al_create_mutex(); | data->mutex  = al_create_mutex(); | ||
| - | data->cond  = al_create_cond(); | ||
| data->display = display; | data->display = display; | ||
| data->caret  = caret; | data->caret  = caret; | ||
| Ligne 34: | Ligne 30: | ||
| { | { | ||
| al_destroy_mutex(data->mutex); | al_destroy_mutex(data->mutex); | ||
| - | al_destroy_cond(data->cond); | ||
| } | } | ||
| Ligne 109: | Ligne 104: | ||
| } | } | ||
| - | static void *progressBar(ALLEGRO_THREAD *thr, void *arg) { | + | static void *progressBar(ALLEGRO_THREAD *thr, void *arg) | 
| + | { | ||
| ALLEGRO_TIMER  *timer  = NULL; | ALLEGRO_TIMER  *timer  = NULL; | ||
| ALLEGRO_EVENT_QUEUE *event_queue = NULL; | ALLEGRO_EVENT_QUEUE *event_queue = NULL; | ||
| Ligne 240: | Ligne 235: | ||
| </code> | </code> | ||
| - | Pour terminer ce type de thread, un **join** ne suffit pas car il n'enlève pas les **locks** dus aux conditions. Vous devez utiliser à la place : | + | La fonction restera bloquée sur **al_wait_cond** tant que le thread parent n'a pas appelé **al_broadcast_cond**. | 
| + | |||
| + | Pour terminer ce type de thread, un **join** ne suffit pas car il n'enlève pas les **locks** dûs aux conditions. Vous devez utiliser à la place : | ||
| <code C> | <code C> | ||
| Ligne 248: | Ligne 245: | ||
| al_unlock_mutex(data.mutex); | al_unlock_mutex(data.mutex); | ||
| </code> | </code> | ||
| + | |||
| + | Maintenant que vous savez utiliser les threads, vous savez pratiquement tout ce qu'il y a à savoir sur le core d'allegro, dans la suite de ce tutoriel nous aborderons les différents greffons d'Allegro. | ||
| [[allegro:input|Précédent]] << [[allegro:start#articles|Sommaire]] >> [[allegro:addons|Suivant]] | [[allegro:input|Précédent]] << [[allegro:start#articles|Sommaire]] >> [[allegro:addons|Suivant]] | ||