Help (threads)

loicus Messages postés 46 Date d'inscription mardi 27 août 2002 Statut Membre Dernière intervention 3 mai 2008 - 29 oct. 2002 à 18:50
cs_Juke Messages postés 42 Date d'inscription mardi 15 octobre 2002 Statut Membre Dernière intervention 23 janvier 2003 - 6 nov. 2002 à 09:33
Bon, bhen voila.. j'essaye de faire un thread

j'aimerais ouvrir la fonctions LCD_BootScreen()
dans un thread, donc j'utilise cette fonction :

thboot= CreateThread(NULL, 0, LCD_BootScreen , NULL, NULL, NULL);

thboot est le handle de mon threads et j'ai mis tt le reste a null, pour les essais...

Mais, quand je compile avec VC++6 il me dis :

error C2664: 'CreateThread' : cannot convert parameter 3 from 'void (void)' to 'unsigned long (__stdcall *)(void *)'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast

Voila, je ne sais pas coment je dois ecrire l'argument 3 de la fonctions... donc, svp aider moi

merci d'avance

7 réponses

jcecchi Messages postés 117 Date d'inscription samedi 12 janvier 2002 Statut Membre Dernière intervention 14 janvier 2003 3
29 oct. 2002 à 19:20
salut,

essayes :

thboot = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)LCD_BootScreen, NULL, NULL, NULL);
0
cs_Juke Messages postés 42 Date d'inscription mardi 15 octobre 2002 Statut Membre Dernière intervention 23 janvier 2003
30 oct. 2002 à 08:23
Peut tu m'exxpliquer ce que c'est qu'un thread ?
j'aimerais à l'interieur d'un programme sous dos afficher l'heure en permanence independamment du reste du programme. dois je utiliser un thread ? ou alors comment faire ? est ce ansi ?
0
cs_llo Messages postés 45 Date d'inscription jeudi 10 octobre 2002 Statut Membre Dernière intervention 6 décembre 2002
30 oct. 2002 à 12:39
salut,
chaque programme est composé de 1 ou plusieurs threads. En fait, chacun va avoir sa propre vie même si des objets permettent de les synchroniser ou de partager des ressources.
l'lo
0
cs_NiChaN Messages postés 27 Date d'inscription samedi 20 avril 2002 Statut Membre Dernière intervention 29 décembre 2008
31 oct. 2002 à 00:29
********The EaTo By NiChaN*********

Si C pour un test tu peut eventuelement essayer seulement :
thboot = CreateThread(NULL, 0, 0)
ou bien utiliser les classes du Winthread
exemples :
///////////////////////////////////////////
UINT fonctionRunA(LPVOID pParam);

pThreadB=AfxBeginThread(fonctionRunB,NULL,THREAD_PRIORITY_NORMAL,0,0,NULL);
/////////////////////////////////////////
Ca marche aussi bien !
***********The EaTo By NiChaN *********
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Juke Messages postés 42 Date d'inscription mardi 15 octobre 2002 Statut Membre Dernière intervention 23 janvier 2003
31 oct. 2002 à 08:46
ok, et comment les utiliser brievement ? (sous dos)

merci de tes explications

Juke
0
cs_llo Messages postés 45 Date d'inscription jeudi 10 octobre 2002 Statut Membre Dernière intervention 6 décembre 2002
4 nov. 2002 à 14:45
salut,
apparemment mon message ne s'est pas enregistré.... bon je recommence!
voilà pour créer un thread (cf un autre message auquel j'ai répondu)
#include
...
typedef unsigned (__stdcall *PTHREAD_START) (void *);
...
DWORD WINAPI ProcThread (LPVOID lpThreadParameter)
{
... // pour info lpvThreadParm ==> lpThreadParameter
}
...
DWORD dwThreadID;
HANDLE hThread = ((HANDLE)_beginthreadex(
(void *) (lpsa),
(unsigned) (cbStack),
(PTHREAD_START) (ProcThread),
(void *) (lpvThreadParm),
(unsigned) (fdwCreate),
(unsigned *) (&dwThreadID)))

Dans le thread principal, à la fermeture de l'application, on destroy, tu peux provoquer la fermeture du thread créé et attendre sa réelle fermeture pour supprimer le handle avec : ==>
WaitForMultipleObjects(2, g_hThread, TRUE, INFINITE); // pour un seul thread ==> WaitForSingleObject
CloseHandle(g_hThread[0]);

Pour mettre en veille un thread :
SuspendThread(g_hThread[0]);
Pour le remettre en route :
ResumeThread(g_hThread[0]);

Pour la synchronisation des 2 applis, tu peux utiliser une section critique :
CRITICAL_SECTION g_CriticalSection;

// initialisation
InitializeCriticalSection(&g_CriticalSection);
// destruction
DeleteCriticalSection(&g_CriticalSection);
// utilisation dans chaque thread
EnterCriticalSection(&g_CriticalSection); // si l'autre thread y accède alors ce thread se met en attente d'avoir la ressource
-- faire ce qui doit l'être ==> affichage???
LeaveCriticalSection(&g_CriticalSection); // libération de la section

Pour la partie dos (mode consol???), à priori comme ce n'est pas du graphique ca devrait être pareil...
l'lo
0
cs_Juke Messages postés 42 Date d'inscription mardi 15 octobre 2002 Statut Membre Dernière intervention 23 janvier 2003
6 nov. 2002 à 09:33
merci je vais tester sa.
0
Rejoignez-nous