首页 > 解决方案 > 通过指针将结构传递给函数

问题描述

我正在使用 Win32 API 和 _beginthreadex 调用以下列方式运行线程:

struct StructItem
{
   std::string title;
   int amount;
};

StructItem structItems[33];
unsigned int id;
HANDLE thread = (HANDLE)_beginthreadex(NULL, 0, my_thread, (void*)structItems, 0, &id);

这是我的线程:

unsigned int __stdcall my_thread(void *p)
{
    for (int i = 0; i < 20; i++)
    {           
        // todo: print struct.title
        Sleep(1000);
    }

    return 0;
}

据我了解 *p 是指向我的结构列表的指针,因为我将它们传递给 _beginthreadex 调用中的第四个参数,但我不明白如何转换 *p 以便我可以访问数组来自线程内的结构?

标签: c++multithreading

解决方案


由于StructItem*当您将数组作为参数传递时,数组会衰减为 a(数组的第一个元素的位置),因此请将其转换回StructItem*.

unsigned int __stdcall my_thread(void *p)
{
    auto items = static_cast<StructItem*>(p);
    for (int i = 0; i < 20; i++)
    {           
        std::cout << items[i].title << '\n';
        Sleep(1000);
    }
    return 0;
}

请注意,强制转换 void*为完全没有必要。


推荐阅读