2014-07-17 4 views
2

Je souhaite passer un paramètre __int64 en tant que paramètre à mon thread. Voici mon code actuel:Passer __int64 au paramètre CreateThread

void thisismymainfunc(..., __int64 license, ...) 
{ 
    CreateThread(NULL, NULL, checkLicBan, (LPVOID)license, NULL, NULL); 
} 

le code au fil:

DWORD WINAPI checkLicBan(LPVOID m2dlic) 
{ 
    cout << (__int64)m2dlic << endl; 

le __int64 orginal est:

640810053458582 

Cout-ed int est:

932995186 

Quelqu'un pourrait-il me dire comment pourrais-je passer un tel grand nombre à mon fil?

Merci!

+0

Vous passez un pointeur vers elle. En général, vous créez une structure contenant tout ce que vous voulez transmettre et passez un pointeur à travers ce paramètre. – Mysticial

Répondre

4

Ne pas convertir l'entier de 64 bits en pointeur. Dans les applications 32 bits qui vont le couper en deux. Qu'est-ce que vous imprimez est la moitié inférieure de l'entier qui s'insère dans un pointeur 32 bits (grâce à la magie de petit boutiste)

Vous voulez soit transmettre l'adresse d'un entier 64 bits persistant (et thread sûr) comme celui-ci

CreateThread(NULL, NULL, checkLicBan, &my_persistent_64bit_integer, NULL, NULL); 

et puis accéder comme ça

DWORD WINAPI checkLicBan(LPVOID m2dlic) 
{ 
    cout << *((__int64*)m2dlic) << endl; 

Ou, si vous ne pouvez pas persister la valeur, allouer dynamiquement et supprimez-le dans votre gestionnaire comme celui-ci

void thisismymainfunc(..., __int64 license, ...) 
{ 
    CreateThread(NULL, NULL, checkLicBan, new __int64(license), NULL, NULL); 
} 

Et puis accéder comme ça

DWORD WINAPI checkLicBan(LPVOID m2dlic) 
{ 
    __int64* pval = (__int64*)m2dlic 
    __int64 myval = *pval; 
    delete pval; 

    cout << myval << endl; 
Questions connexes