Historique des modifications - Message

Message #696

Sujet: C++ Irrlicht 1.1 et Ode 0.7 sous linux


Type Date Auteur Contenu
Dernière modification 10-12-2006 11:11:56 smeagol
Les thread posix s'utilise avec pthread.h. Je vais vous passer un header très sympathique qui permet d'utiliser les thread sous win et linux.

#ifndef MY_THREAD_H

#define MY_THREAD_H



//Ces macros servent à uniformiser certaines fonctionnalités entre Windows et Linux.

#ifdef WIN32 //macro version Windows



#   include <windows.h>



    //definition des threads



#   define callback_t                       unsigned long __stdcall



#   define thread_t                         HANDLE*

#   define thread_create(thrd, fct, param)  thrd = new HANDLE;\\

                                            *(thrd) = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(fct),(param),0,NULL)

#   define thread_delete(thrd)              CloseHandle(*(thrd));\\

                                            delete (thrd);

#   define thread_wait_close(thrd)          WaitForMultipleObjects(1, *thrd, TRUE, INFINITE)



    //definition des semaphores et mutex



#   define mutex_t                          CRITICAL_SECTION

#   define mutex_init(mutex)                InitializeCriticalSection((mutex))

#   define mutex_lock(mutex)                EnterCriticalSection((mutex))

#   define mutex_unlock(mutex)              LeaveCriticalSection((mutex))

#   define mutex_delete(mutex)              DeleteCriticalSection((mutex))



#   define semaphore_t                      HANDLE

#   define semaphore_init(sema, max, place) ((sema) = CreateSemaphore(NULL, (max), (place), NULL))

#   define semaphore_lock(sema)             WaitForSingleObject((sema), INFINITE)

#   define semaphore_unlock(sema)           ReleaseSemaphore((sema), 1, NULL)

#   define semaphore_delete(sema)           CloseHandle(sema)



#else //macro version Linux



    //definition des threads



#   include <pthread.h>



#   define callback_t                       void * 



#   define thread_t                         pthread_t*

#   define thread_create(thrd, fct, param)  (thrd) = new pthread_t;\\

                                            pthread_create((thrd), NULL, (fct), (param))

#   define thread_delete(thrd)              delete (thrd);

#   define thread_wait_close(thrd)          pthread_join(*thrd, NULL)



    //definition des semaphores et mutex



#   include <semaphore.h>



#   define mutex_t                          pthread_mutex_t *

#   define mutex_init(mutex)                (mutex) = new pthread_mutex_t;\\

                                            pthread_mutex_init ((mutex), NULL)

#   define mutex_lock(mutex)                pthread_mutex_lock((mutex))

#   define mutex_unlock(mutex)              pthread_mutex_unlock((mutex))

#   define mutex_delete(mutex)              pthread_mutex_destroy((mutex));\\

                                            delete ((mutex))



#   define semaphore_t                      sem_t*

#   define semaphore_init(sema, max, place) (sema) = new sem_t;\\

                                            sem_init ((sema), (max), (place))

#   define semaphore_lock(sema)             sem_wait((sema))

#   define semaphore_unlock(sema)           sem_post((sema))

#   define semaphore_delete(sema)           sem_destroy((sema));\\

                                            delete ((sema))



#endif



#endif

pour creer un thread vous faite:
//la fonction lancer dans le thread
callback_t mafonc(void* ptr);

//dans la fonc main
int main()
{
    pthread_t thrd;
    thread_create(thrd, mafonc, 'ptr');
    //'ptr' est un pointeur qui sera envoyer en parametre (ne pas oublier de le caster)
    //il peut etre egal a NULL
    
    return 0;
}

Les mutex et les semaphore son des macro qui permette de rentrer dans des section critique.(les semaphore permette a plusieurs processus de rentrer en section critique. Il doivent être global par rapport au fonction threader

il suffit de creer le type
mutex_t mutex;    //en global
mutex_init(mutex);    //dans la fonction main

pour entrer en section critiques
mutex_lock(mutex);

pour en sortir
mutex_unlock(mutex);

pour supprimer le thread;
mutex_delete(mutex)

pour les semaphores s'est la même chose mais 'max' represente le maximum d'entrer en section critique et 'place' a combien est initialisé le conteur.

Je ne dit pas que s'est parfait. Car elle n'est pas entièrement tester mais sa marche pas mal
Création du message 10-12-2006 11:08:55 smeagol
Les thread posix s'utilise avec pthread.h. Je vais vous passer un header très sympathique qui permet d'utiliser les thread sous win et linux.

#ifndef MY_THREAD_H

#define MY_THREAD_H



//Ces macros servent à uniformiser certaines fonctionnalités entre Windows et Linux.

#ifdef WIN32 //macro version Windows



#   include <windows.h>



    //definition des threads



#   define callback_t                       unsigned long __stdcall



#   define thread_t                         HANDLE*

#   define thread_create(thrd, fct, param)  thrd = new HANDLE;\\

                                            *(thrd) = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(fct),(param),0,NULL)

#   define thread_delete(thrd)              CloseHandle(*(thrd));\\

                                            delete (thrd);

#   define thread_wait_close(thrd)          WaitForMultipleObjects(1, *thrd, TRUE, INFINITE)



    //definition des semaphores et mutex



#   define mutex_t                          CRITICAL_SECTION

#   define mutex_init(mutex)                InitializeCriticalSection((mutex))

#   define mutex_lock(mutex)                EnterCriticalSection((mutex))

#   define mutex_unlock(mutex)              LeaveCriticalSection((mutex))

#   define mutex_delete(mutex)              DeleteCriticalSection((mutex))



#   define semaphore_t                      HANDLE

#   define semaphore_init(sema, max, place) ((sema) = CreateSemaphore(NULL, (max), (place), NULL))

#   define semaphore_lock(sema)             WaitForSingleObject((sema), INFINITE)

#   define semaphore_unlock(sema)           ReleaseSemaphore((sema), 1, NULL)

#   define semaphore_delete(sema)           CloseHandle(sema)



#else //macro version Linux



    //definition des threads



#   include <pthread.h>



#   define callback_t                       void * 



#   define thread_t                         pthread_t*

#   define thread_create(thrd, fct, param)  (thrd) = new pthread_t;\\

                                            pthread_create((thrd), NULL, (fct), (param))

#   define thread_delete(thrd)              delete (thrd);

#   define thread_wait_close(thrd)          pthread_join(*thrd, NULL)



    //definition des semaphores et mutex



#   include <semaphore.h>



#   define mutex_t                          pthread_mutex_t *

#   define mutex_init(mutex)                (mutex) = new pthread_mutex_t;\\

                                            pthread_mutex_init ((mutex), NULL)

#   define mutex_lock(mutex)                pthread_mutex_lock((mutex))

#   define mutex_unlock(mutex)              pthread_mutex_unlock((mutex))

#   define mutex_delete(mutex)              pthread_mutex_destroy((mutex));\\

                                            delete ((mutex))



#   define semaphore_t                      sem_t*

#   define semaphore_init(sema, max, place) (sema) = new sem_t;\\

                                            sem_init ((sema), (max), (place))

#   define semaphore_lock(sema)             sem_wait((sema))

#   define semaphore_unlock(sema)           sem_post((sema))

#   define semaphore_delete(sema)           sem_destroy((sema));\\

                                            delete ((sema))



#endif



#endif

pour creer un thread vous faite:
//la fonction lancer dans le thread
callback_t mafonc(void* ptr);

//dans la fonc main
int main()
{
    pthread_t thrd;
    thread_create(thrd, mafonc, 'ptr');
    //'ptr' est un pointeur qui sera envoyer en parametre (ne pas oublier de le caster)
    //il peut etre egal a NULL
    
    return 0;
}

Les mutex et les semaphore son des macro qui permette de rentrer dans des section critique.(les semaphore permette a plusieurs processus de rentrer en section critique. Il doivent être global par rapport au fonction threader

il suffit de creer le type
mutex_t mutex;    //en global
mutex_init(mutex);    //dans la fonction main

pour entrer en section critiques
mutex_lock(mutex);

pour en sortir
mutex_unlock(mutex);

pour supprimer le thread;
mutex_delete(mutex)

pour les semaphores s'est la même chose mais 'max' represente le maximum d'entrer en section critique et 'place' a combien est initialisé le conteur.

Je ne dit pas que s'est parfait. Car elle n'est pas entièrement tester mais sa marche pas mal

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
134 invités en ligne
membre en ligne: -
RSS Feed