【问题标题】:Pass __int64 to CreateThread Parameter将 __int64 传递给 CreateThread 参数
【发布时间】:2014-07-17 22:11:27
【问题描述】:

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

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

线程代码:

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

原来的 __int64 是:

640810053458582

计算的 int 是:

932995186

谁能告诉我如何将这么大的数字传递给我的线程?

谢谢!

【问题讨论】:

  • 你传递一个指向它的指针。通常,您创建一个结构,其中包含您想要传递的所有内容并通过该参数传递一个指针。

标签: c++ multithreading visual-studio int64


【解决方案1】:

不要将 64 位整数转换为指针。在 32 位应用程序中,将其切成两半。您要打印的是适合 32 位指针的整数的下半部分(感谢 little endian 的魔力)

您要么想像这样传递持久(和线程安全)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;

【讨论】:

    猜你喜欢
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多