Help (threads)

Signaler
Messages postés
46
Date d'inscription
mardi 27 août 2002
Statut
Membre
Dernière intervention
3 mai 2008
-
Messages postés
42
Date d'inscription
mardi 15 octobre 2002
Statut
Membre
Dernière intervention
23 janvier 2003
-
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

Messages postés
117
Date d'inscription
samedi 12 janvier 2002
Statut
Membre
Dernière intervention
14 janvier 2003
2
salut,

essayes :

thboot = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)LCD_BootScreen, NULL, NULL, NULL);
Messages postés
42
Date d'inscription
mardi 15 octobre 2002
Statut
Membre
Dernière intervention
23 janvier 2003

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 ?
Messages postés
45
Date d'inscription
jeudi 10 octobre 2002
Statut
Membre
Dernière intervention
6 décembre 2002

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
Messages postés
27
Date d'inscription
samedi 20 avril 2002
Statut
Membre
Dernière intervention
29 décembre 2008

********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 *********
Messages postés
42
Date d'inscription
mardi 15 octobre 2002
Statut
Membre
Dernière intervention
23 janvier 2003

ok, et comment les utiliser brievement ? (sous dos)

merci de tes explications

Juke
Messages postés
45
Date d'inscription
jeudi 10 octobre 2002
Statut
Membre
Dernière intervention
6 décembre 2002

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
Messages postés
42
Date d'inscription
mardi 15 octobre 2002
Statut
Membre
Dernière intervention
23 janvier 2003

merci je vais tester sa.