2014-07-17 29 views
2

我想將一個__int64作爲參數傳遞給我的線程。這裏是我當前的代碼:將__int64傳遞給CreateThread參數

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

代碼線程:

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

的原單__int64是:

640810053458582 

COUT-ED int是:

932995186 

誰能告訴我,我怎麼能通過這麼大的號碼到我的線程?

謝謝!

+0

你傳遞一個指針。一般來說,你創建一個結構體,它擁有你想要傳入的所有內容,並通過該參數傳入一個指針。 – Mysticial

回答

4

不要將64位整數轉換爲指針。在32位應用程序中,它會將其砍成一半。你打印的是整數的下半部分,可以放入一個32位指針(感謝小端的魔力)

你要麼傳遞一個持久(和線程安全)64位整數這樣

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

,然後訪問它像這樣

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

或者,如果你不能堅持的價值,動態分配並刪除它在你的處理器這樣

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

,然後訪問它像這樣

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

    cout << myval << endl;