[C/C++] THREAD, erreur.

Résolu
skarsnick Messages postés 79 Date d'inscription   Statut Membre Dernière intervention   -  
skarsnick Messages postés 79 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour, à nouveau moi, je vais finir par prendre un abonnement, en plus toujours à demandé conseil, un jour je saurais en donner aussi, promis:)
Le problème du jours conserne ce morceau:

HANDLE hThread = NULL;


DWORD WINAPI LightOff()
{
//alume la lampe
while(tata)
   {
   i++;
   i--;
   }
TerminateThread(hThread,0);
}

HANDLE StopLight()
{
    DWORD dwThreadId;
	HANDLE hThread = NULL;

    hThread = CreateThread( 
        NULL,                        // default security attributes 
        0,                      // use default stack size  
        LightOff,                       // thread function 
        NULL,	                      // argument to thread function 
        0,                        // use default creation flags 
        &dwThreadId);                       // returns the thread identifier 
 
return (hThread);
}

void CS8Dlg::OffButton1() 
{
	if (hThread != NULL)
	TerminateThread(hThread,0);
	hThread = StopLight();
}
void CS8Dlg::OnButton1() 
{
tata=0;
}


Voilà lors de la compilation, j'ai une erreur consernant le troisième argument du CreateThread,
Si j'ai bien fait mon code, j'aimerai que quand on clic sur OffButton1, cela lance la fonction DWORD WINAPI LightOff() en arrière plan (sans bloqué mon appli à cause du while(tata) qui a son importance...) si mon appli reste accésible, je pourrai appuyer sur le bouton OnButton1 et mettre fin au while :)
Le troisième argument de CreateThread, doit être un pointeur sur fonction...
il me dis ne pas pouvoir convertir le unsigned short (void) vers le unsigned short __je_sais_plus_quoi (void*)

Quelqu'un saurait il ou j'ai fait faut et si l'utilisation d'un thread est bien justifiée ici?
Merci

1 réponse

skarsnick Messages postés 79 Date d'inscription   Statut Membre Dernière intervention   59
 
il suffit de déclarer la fonction en

LightOff(void*)
et de l'appeller quand on en a besoin en faisant

LightOff(NULL);

et ca marche :)
0