00001 /*! \file Multitache.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 (www.aerith.fr) 00007 \version 1.0 00008 \date 18/03/2007 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 typedef HANDLE THREAD; 00019 typedef HANDLE MUTEX; 00020 #ifndef ROUTINE 00021 typedef LPTHREAD_START_ROUTINE ROUTINE; 00022 #endif 00023 typedef LPVOID PARAMETRE; 00024 00025 #else 00026 #include <pthread.h> 00027 00028 //! Une tache 00029 /*! Crée une tache pour le multitache. */ 00030 typedef pthread_t THREAD; 00031 00032 //! Une syncronisation 00033 /*! Crée un verou permétant de syncroniser des operations dans une application multitache. */ 00034 typedef pthread_mutex_t MUTEX; 00035 00036 #ifndef ROUTINE 00037 //! Nom de routine 00038 /*! Pointe sur une fonction. */ 00039 typedef void *(*ROUTINE)(void *); 00040 #endif 00041 00042 //! Pointeur sur une variable quelquonque 00043 /*! Pointe sur une variable de n'importe quel type. */ 00044 typedef void * PARAMETRE; 00045 #endif 00046 00047 00048 //! Demare un thread 00049 /*! Demare une tache \a Process avec un parametre \a Param. 00050 \param pThread adresse memoire du thread 00051 \param Process nom de la routine à threader 00052 \param Param parametre a passer à la routine 00053 \return 1 si OK sinon 0 00054 \sa ThreadStop(), ThreadExit() et ThreadWait() 00055 */ 00056 int ThreadStart(THREAD *pThread, ROUTINE Process, PARAMETRE Param); 00057 00058 //! Stop un thread 00059 /*! Force la fermeture d'une tache. 00060 \param pThread adresse memoire du thread 00061 \sa ThreadStart(), ThreadExit() et ThreadWait() 00062 */ 00063 void ThreadStop(THREAD *pThread); 00064 00065 //! Sortie d'un thread 00066 /*! Sortie propre d'une tache et renvoie \a iExitCode au systeme. 00067 \param iExitCode code retourner au systeme 00068 \sa ThreadStart(), ThreadStop() et ThreadWait() 00069 */ 00070 void ThreadExit(int iExitCode); 00071 00072 //! Attent un thread 00073 /*! Pause la tache en cour en attente de la fin de la tache donnée. 00074 \param pThread adresse memoire du thread 00075 \sa ThreadStart(), ThreadStop() et ThreadExit() 00076 */ 00077 void ThreadWait(THREAD *pThread); 00078 00079 //! Initialise un mutex 00080 /*! Initialise un verou de syncronisation de tache 00081 \param pMutex adresse memoire du mutex 00082 \sa MutexLock(), MutexUnLock() et MutexStop() 00083 */ 00084 void MutexInit(MUTEX *pMutex); 00085 00086 //! Attent un mutex 00087 /*! Pause la tache en cour en attente du déverouillage du mutex et va le verouillé. 00088 \param pMutex adresse memoire du mutex 00089 \sa MutexInit(), MutexUnLock() et MutexStop() 00090 */ 00091 void MutexLock(MUTEX *pMutex); 00092 00093 //! Libere un mutex 00094 /*! Déverouille le mutex préalablement réservé. 00095 \param pMutex adresse memoire du mutex 00096 \sa MutexInit(), MutexLock() et ThreadExit() 00097 */ 00098 void MutexUnLock(MUTEX *pMutex); 00099 00100 //! Stop un mutex 00101 /*! Déverouille et détrui un mutex. 00102 \param pMutex adresse memoire du mutex 00103 \sa MutexInit(), MutexLock() et MutexUnLock() 00104 */ 00105 void MutexStop(MUTEX *pMutex); 00106 00107 #endif