将__int64传递给CreateThread参数

时间:2014-07-17 22:11:27

标签: c++ multithreading visual-studio int64

我想将__int64作为参数传递给我的Thread。这是我目前的代码:

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

有人能告诉我怎么能把这么大的号码传递给我的帖子?

谢谢!

1 个答案:

答案 0 :(得分:5)

不要将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;