将__int64传递给CreateThread参数

Pass __int64 to CreateThread Parameter

本文关键字:CreateThread 参数 int64      更新时间:2023-10-16

我想将__int64作为参数传递给我的线程。下面是我当前的代码:

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

线程的代码:

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

原来的__int64是:

640810053458582

count -ed int is:

932995186

谁能告诉我我怎么能传递这么大的数字到我的线程?

谢谢!

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