[C/C++] THREAD, erreur.

Résolu/Fermé
skarsnick Messages postés 79 Date d'inscription jeudi 15 mars 2007 Statut Membre Dernière intervention 17 décembre 2009 - 27 avril 2007 à 11:30
skarsnick Messages postés 79 Date d'inscription jeudi 15 mars 2007 Statut Membre Dernière intervention 17 décembre 2009 - 27 avril 2007 à 16:00
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 jeudi 15 mars 2007 Statut Membre Dernière intervention 17 décembre 2009 59
27 avril 2007 à 16:00
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