00001 /*! \file SurcoucheMultitache.h 00002 \brief Surcouche pour multitache. 00003 00004 Redéfinie tout un tas de fonctions système pour les rendre portables unix et windows. 00005 00006 \author aerith (http://aerith.fr) 00007 \version 1.0 00008 \date 11/03/2008 00009 */ 00010 00011 #ifndef INCLUDE_RSRC_PORTAGE_MULTITACHE 00012 #define INCLUDE_RSRC_PORTAGE_MULTITACHE 00013 00014 00015 #ifdef WIN32 00016 #include <windows.h> 00017 00018 //! Une tache 00019 /*! Crée une tache pour le multitache. */ 00020 typedef HANDLE THREAD; 00021 00022 //! Une syncronisation 00023 /*! Crée un verou permétant de syncroniser des operations dans une application multitache. */ 00024 typedef HANDLE MUTEX; 00025 00026 #ifndef ROUTINE 00027 //! Nom de routine 00028 /*! Pointe sur une fonction. */ 00029 typedef LPTHREAD_START_ROUTINE ROUTINE; 00030 #endif 00031 00032 //! Pointeur sur une variable quelquonque 00033 /*! Pointe sur une variable de n'importe quel type. */ 00034 typedef LPVOID PARAMETRE; 00035 00036 #else 00037 #include <pthread.h> 00038 #include <string.h> 00039 00040 //! Une tache 00041 /*! Crée une tache pour le multitache. */ 00042 typedef pthread_t THREAD; 00043 00044 //! Une syncronisation 00045 /*! Crée un verou permétant de syncroniser des operations dans une application multitache. */ 00046 typedef pthread_mutex_t MUTEX; 00047 00048 #ifndef ROUTINE 00049 //! Nom de routine 00050 /*! Pointe sur une fonction. */ 00051 typedef void *(*ROUTINE)(void *); 00052 #endif 00053 00054 //! Pointeur sur une variable quelquonque 00055 /*! Pointe sur une variable de n'importe quel type. */ 00056 typedef void *PARAMETRE; 00057 #endif 00058 00059 00060 //! Demare un thread 00061 /*! Demare une tache \a Process avec un parametre \a Param. 00062 \param pThread adresse memoire du thread 00063 \param Process nom de la routine à threader 00064 \param Param parametre a passer à la routine 00065 \return 1 si OK sinon 0 00066 \sa ThreadStop(), ThreadExit() et ThreadWait() 00067 */ 00068 int ThreadStart(THREAD *pThread, ROUTINE Process, PARAMETRE Param); 00069 00070 //! Stop un thread 00071 /*! Force la fermeture d'une tache. 00072 \param pThread adresse memoire du thread 00073 \sa ThreadStart(), ThreadExit() et ThreadWait() 00074 */ 00075 void ThreadStop(THREAD *pThread); 00076 00077 //! Sortie d'un thread 00078 /*! Sortie propre d'une tache et renvoie \a iExitCode au systeme. 00079 \param iExitCode code retourner au systeme 00080 \sa ThreadStart(), ThreadStop() et ThreadWait() 00081 */ 00082 void ThreadExit(int iExitCode); 00083 00084 //! Attent un thread 00085 /*! Pause la tache en cour en attente de la fin de la tache donnée. 00086 \param pThread adresse memoire du thread 00087 \sa ThreadStart(), ThreadStop() et ThreadExit() 00088 */ 00089 void ThreadWait(THREAD *pThread); 00090 00091 //! Retourne l'id du thread 00092 /*! Retourne l'id du thread qui éxécute la fonction. 00093 */ 00094 unsigned int ThreadId(); 00095 00096 //! Initialise un mutex 00097 /*! Initialise un verou de syncronisation de tache 00098 \param pMutex adresse memoire du mutex 00099 \sa MutexLock(), MutexUnLock() et MutexStop() 00100 */ 00101 void MutexInit(MUTEX *pMutex); 00102 00103 //! Attent un mutex 00104 /*! Pause la tache en cour en attente du déverouillage du mutex et va le verouillé. 00105 \param pMutex adresse memoire du mutex 00106 \sa MutexInit(), MutexUnLock() et MutexStop() 00107 */ 00108 void MutexLock(MUTEX *pMutex); 00109 00110 //! Libere un mutex 00111 /*! Déverouille le mutex préalablement réservé. 00112 \param pMutex adresse memoire du mutex 00113 \sa MutexInit(), MutexLock() et ThreadExit() 00114 */ 00115 void MutexUnLock(MUTEX *pMutex); 00116 00117 //! Stop un mutex 00118 /*! Déverouille et détrui un mutex. 00119 \param pMutex adresse memoire du mutex 00120 \sa MutexInit(), MutexLock() et MutexUnLock() 00121 */ 00122 void MutexStop(MUTEX *pMutex); 00123 00124 #endif