[英]Pass multiple pointers as arguments to pthread_create
我正在为我的游戏服务器编写一个很小的库。 我为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)
然后在ThreadStarter
(以及当pthread_create
失败时) free()
接收到的指针,即
void* ThreadStarter(void* arg_) {
void **arg = (void**)arg_;
// Use arg[0], arg[1], arg[2]
free(arg);
[...]
}
您可能必须分配一个结构(如果所有信息都具有相同的类型,则可以分配一个数组),将相关信息放入其成员中,并使用分配的结构(指针)作为唯一参数来创建线程。
然后,一旦检索到其成员中的信息,线程就必须释放此结构。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.