gpt4 book ai didi

c++ - 将多个指针作为参数传递给 pthread_create

转载 作者:行者123 更新时间:2023-11-28 04:13:36 25 4
gpt4 key购买 nike

我正在为我的游戏服务器编写一个小型库。我为 pthread 函数编写了包装器,想知道是否可以将多个指针作为原始字节数组传递给一个函数。

typedef Thread pthread_t;
typedef int (ThreadFunction)(void *);

void* ThreadStarter(void* arg) {
// This should get the passed Function, Argument and Detach from arg.

Function(Argument) // Use the values passed.
if (Detach)
DoSomething();

pthread_exit(0);

}

Thread StartThread(ThreadFunction* Function, void* Argument, bool Detach) {
arg; // This is what I dont know how to do!

pthread_t t;
int errCode = pthread_create(&t, ThreadStarter, arg);
if (errCode) {
Log(ERROR, "StartThread: Cannot spawn thread. Failcode %d.", errCode);
return;
} else if (Detach)
pthread_detach();

return t;
}

我需要一种方法来传递包含在 arg 中的 3 个指针。我在想一个原始字节数组,但我觉得这不是这样做的方式。由于内部约定,不允许使用结构来存储这些参数,因此这是题外话。

最佳答案

如果不允许使用结构,则数组似乎是唯一剩下的东西。但是,它不能是局部变量,因为不能保证 ThreadStarter 会在 StartThread 返回之前停止使用该参数(这些事情是并行发生的)。所以你需要像这样把参数放在堆上

void **arg = (void**)malloc(sizeof(void*)*3));
arg[0] = ...;
...
arg[2] = ...;
pthread_create(&t, ThreadStarter, arg)

然后 free()ThreadStarter 中接收到指针(以及当 pthread_create 失败时),即

void* ThreadStarter(void* arg_) {
void **arg = (void**)arg_;
// Use arg[0], arg[1], arg[2]
free(arg);
[...]
}

关于c++ - 将多个指针作为参数传递给 pthread_create,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57127889/

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