为什么函数接受void指针?

ozg*_*gur 1 c c++ pthreads parameter-passing void-pointers

我想了解pthread.

但是,需要创建如下的线程方法:

void *SomeMethod(void* x)
{
    //Do Something
}
Run Code Online (Sandbox Code Playgroud)

为什么有必要创建一个接受void指针的函数?我们不能使用像这样的函数的pthread吗?

void SomeMethod()
{
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*ely 5

因为pthread_create函数接受一个类型的参数,void* (*)(void*)它是一个函数接受void*并返回a void*,所以使用pthread_create你需要使用的函数来创建一个线程.

pthread_createAPI需要,为了让您可以将数据传递给新的线程,再飞回来的数据.如果您不想传递任何内容,则仍需要满足该接口,但只需将其传递为NULL即可.

仅仅因为现在不想将任何参数传递给新线程并不意味着API应该被设计为仅支持您当前的用例.根据函数获取编写的API void*(可以选择性地传递NULL)比使用不带参数的函数的API更好,并要求用户提出自己的解决方案来将数据传递给新线程.

在C++中,您可以为新线程使用任何类型的函数,并将其传递给您需要的任何参数:

std::thread t(&SomeMethod);
Run Code Online (Sandbox Code Playgroud)