Thread

dev_hy Messages postés 7 Date d'inscription mardi 25 juillet 2006 Statut Membre Dernière intervention 17 juillet 2007 - 5 oct. 2006 à 16:10
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 - 5 oct. 2006 à 20:44
voila je veux utiliser les threads sous windows. alors j'ai crée un classe thread, dans la méthode de créeation de thread toute est bon mais il m'affiche l'erreur suivente: 
error C2664: 'CreateThread' : cannot convert parameter 3 from 'unsigned long (void)' to 'unsigned long (__stdcall *)(void *)'. merci pour votre aide

bool CWorkerThread::InitThread()
    {
     DWORD dwThreadId;
     m_hThread = CreateThread(0,
            0,
            ThreadFunc,
            this,
            0,
            &m_dwID); /// DWORD &m_dwID
        if(!m_hThread)
        {
            // Impossible de créer le thread !
            return false;
        }
        return true;           
    }

7 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 oct. 2006 à 17:16
Le prob semble être sur ThreadFunc que tu ne dois pas avoir mis static.

ciao...
BruNews, MVP VC++
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
5 oct. 2006 à 17:32
ou peut être comme ça :

DWORD CWorkerThread::InitThread()
    {
     DWORD dwThreadId;
     m_hThread = CreateThread(0,
            0,
            ThreadFunc,
            this,
            0,
            &dwThreadId);
        if(!m_hThread)
        {
            // Impossible de créer le thread !
            return -1;
        }
        return dwThreadId;           
    }
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 oct. 2006 à 17:41
Il y aurait bien en enlevant le code inutile:

long CWorkerThread::InitThread()
{
  m_hThread = CreateThread(0, 0,
            ThreadFunc,
            this,
            0,
            0); // INUTILE
  return (long) m_hThread;
}

mais bon, ça ne fera peut-être pas assez CLASSieux...

ciao...
BruNews, MVP VC++
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
5 oct. 2006 à 18:36
Oui effectivement, ce paramètre semble être un résidu de compatibilité ascendante avec 95/98/Me pour lesquelles il ne doit pas être nul. Et c'est le handle retourné par CreateThread() qui est utilisé par les autres fonctions de l'api.
Par contre, rien ne garantit que 0 soit NULL. NULL c'est NULL et 0 c'est 0. Par convention c'est pareil, mais c'est juste une convention et un raccourci utile, pas un standard. Si demain la macro définissant la valeur de NULL est changée, boum...
0

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

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 oct. 2006 à 18:45
NULL restera 0 sinon plus un soft ne tournerait.

ciao...
BruNews, MVP VC++
0
nightlord666 Messages postés 746 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 23 mai 2007 10
5 oct. 2006 à 20:09
Je pense plutôt qu'il n'a pas définit sa fonction en __stdcall, et qu'il n'a pas définit de paramètres.

Le prototype de ThreadFunc :
static HRESULT __stdcall ThreadFunc(LPVOID lpParam);

<hr size="2" width="100%" />Sachant qu'on peut toujours enlever une ligne à un programme, et que dans un programme il y a toujours un bug, un programme peut se résumer à une ligne avec un bug.
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
5 oct. 2006 à 20:44
oui l'erreur porte sur ThreadFunc
0
Rejoignez-nous