use*_*252 1 c++ posix pthreads
说我有以下功能:
bool foo (int a); // This method declaration can not be changed.
Run Code Online (Sandbox Code Playgroud)
如何为此创建pthread?我如何找出函数返回的内容?我看过网上看起来像我想要创建一个pthread的任何函数必须void*作为一个参数,并且必须返回void*,我不太确定所有这些的投射是如何工作的,或者我在哪里会得到返回的布尔.
我是C++的新手,所以请耐心等待我=)
小智 5
至于你只处理bools(实际上是整数),有可能(但不建议)将函数转换为pthread函数类型,因为指针与(某些)整数类型兼容:
pthread_t pid;
pthread_create(&pid, NULL, (void *(*)(void *))foo, (void *)argument));
Run Code Online (Sandbox Code Playgroud)
但是,您最好将函数包装到另一个与pthread兼容的函数中,然后返回指向其返回值的指针(使用后必须为free()):
void *foo_wrapper(void *arg)
{
int a = *(int *)arg;
bool retval = foo(a);
bool *ret = malloc(sizeof(bool));
*ret = retval;
return ret;
}
Run Code Online (Sandbox Code Playgroud)
然后使用:
pthread_t pid;
pthread_create(&pid, NULL, foo_wrapper, &a);
Run Code Online (Sandbox Code Playgroud)
使用此方法,将来您将能够使用任意返回或参数类型调用函数.