gpt4 book ai didi

c++ - 如何安全地将变量的值传递给 C++ 方法,该方法只会将 void* 作为参数?

转载 作者:行者123 更新时间:2023-11-27 23:36:58 30 4
gpt4 key购买 nike

我有一个函数将 void* 作为唯一参数,并返回 void*:gpioThreadFunc_t

我现在有一个 track_t 类型的变量,它基本上是一个 unsigned char,并且想用它的值 (!) 作为参数调用我的方法。反过来,该方法必须确保参数确实是一个 track_t(resp. unsigned char)并使用它。

我试过这样调用方法:

start_thread (Loop, (void *) &track);

…其中 Loop 是方法的名称,track 是相关的(局部)变量。当将其值设置为 2 时,该方法得到的是 0 或 131 或其他值,但不是 2。

Loop 定义如下:

void *Loop (void *params);

有人知道如何调用我的方法并安全地传递必要的参数吗?或者我应该忘记参数传递并改为依赖全局(或实例)变量?谢谢。

澄清:我仍在处理我的代码,因此这不是调试请求。我问这个问题只是为了不陷入陷阱。

最佳答案

除非线程实际需要访问track变量本身(对其进行更改),那么您应该只传递 track变量而不是它的地址unsigned char很容易放入 void* 的位中指针:

void* Loop(void *params) {
track_t track = static_cast<track_t>(reinterpret_cast<uintptr_t>(params));
...
}

...

track_t track = 2;
start_thread(Loop, reinterpret_cast<void*>(static_cast<uintptr_t>(track)));

否则,你可以动态分配一个track_t传递给线程,然后在线程退出前释放它:

void* Loop(void *params) {
std::unique_ptr<track_t> track(static_cast<track_t*>(params));
...
}

...

std::unique_ptr<track_t> track(new track_t(2));
if (start_thread(Loop, track.get()))
track.release();

关于c++ - 如何安全地将变量的值传递给 C++ 方法,该方法只会将 void* 作为参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58566615/

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