C++,为具有返回类型的函数创建pthread?

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)

使用此方法,将来您将能够使用任意返回或参数类型调用函数.