gpt4 book ai didi

c++ - 将结构传递到具有特殊 Fork() 定义的线程中

转载 作者:行者123 更新时间:2023-11-28 00:11:30 24 4
gpt4 key购买 nike

对于一个项目,我必须使用 Fork 的以下定义:void Fork(VoidFunctionPtr func, int arg);。我需要将一个结构作为 arg 传入,以便我可以为 fork 函数提供更多信息,但我不断收到错误,因为结构不是 int。我试图将两个指向缓冲区的指针传递到线程中,以便在线程之间共享数据。如果有人知道如何欺骗函数接受结构作为 int 或其他方式来实现在由这个版本的 Fork 创建的线程之间共享缓冲区的目标,请告诉我。附言我不能使用 C++ 标准版本的 Fork,因为我正在做的编程非常低级。

最佳答案

你可以使用 reinterpret_cast< int >(&OYourStruct),然后你可以将一个指针作为一个 int (arg) 传递给你的结构,但必须是一个指针而不是实际的结构,因为指针的大小与int,还因为在任何情况下按值传递结构都不会产生什么效果,在这种情况下,将结构转换为 int 会生成除预期结果之外的所有结果。

当您需要从函数中访问您的结构时,您可以执行相反的操作

YourStruct* POYourStruct = reinterpret_cast< YourStruct* >(arg);

你也可以使用旧的 case cast (int)&OYourStruct and (YourStruct*)arg

但据说较新的 C++ 运算符更安全。

实际上在大多数系统(所有 32 位系统)上,int 和 void* 都是 32 位的,而且我很确定大多数 64 位系统要么保留这种关系,要么在编译时警告您使用 long 而不是一个整数。

但更好的解决方案实际上是将您的 int arg 替换为 void*。然后你可以指向任何数据(也包括结构),这保证适用于所有系统。您仍然需要重铸,但这是使用纯 C 时通常解决此问题的方法。

我使用一个系统,其中数据指针是类型类 storage_class*,并且我所有的存储类都派生自此类。然后你将你的基类指针转换为你知道的派生指针,这应该是非常安全的。只需回想一下您指向的派生类 ptr 即可。

关于c++ - 将结构传递到具有特殊 Fork() 定义的线程中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32878202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com