c++ - 通过指针将结构传递给函数
问题描述
我正在使用 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 以便我可以访问数组来自线程内的结构?
解决方案
由于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*
为完全没有必要。
推荐阅读
- java - 参数化 selenium junit 中的变量以加载测试要在 jmeter 上运行的网站
- ruby-on-rails - 是否可以自定义像 has_role 这样的 rolify 方法?, add_role 等
- android - 无法在 Android Studio 中导入项目
- node.js - 在猫鼬中复制数组中的对象
- c# - 为什么 UnusedMember.Global 忽略某些公共/内部属性?
- c++ - C++ 在构造函数的初始化列表中初始化嵌套结构?
- git - 如何在获取冒号后删除自动完成文本?
- java - 如何读取和发送用 Message.writeto() 编写的 java 邮件消息?
- performance - 停止应用程序的所有内存访问
- reactjs - 目录 react-app 包含可能发生冲突的文件:package.json