gpt4 book ai didi

c++ - pthread_create::无法使用类型为 'void *(*)(void *)' 的右值初始化类型为 'void *' 的参数

转载 作者:行者123 更新时间:2023-11-28 02:51:35 25 4
gpt4 key购买 nike

我正在尝试将命名空间函数传递给 pthread_create,但编译器给我错误,我用谷歌搜索,在 stackoverflow 中搜索,但我无法解决我的问题:

#include <pthread.h>                                                                                                                                                                                                                                                                                             
#include <iostream>
namespace SBProcThreads
{
void ProcThread(void* defArg)
{
std::cout<<"### :"<<__PRETTY_FUNCTION__<<": ThreadId :"<<(pthread_self())->__sig<<": ###"<<std::endl;
}
}


int main()
{
pthread_t pThreadId;
::pthread_create(&pThreadId,NULL,(void*)&SBProcThreads::ProcThread,NULL);
}

我不想传递任何参数,我什至删除了 void* defArg 并尝试在::pthread_create 函数中提供第 4 个参数,但它仍然给我错误。

最佳答案

pthread_create 的函数签名需要一个返回 void * 的函数。此外,从 pthread_self() 返回的 pthread_t 应该被不透明地处理。这两个更改都反射(reflect)在下面并在我的机器上编译:

#include <pthread.h>                                                                                                                                                                                                                                                              
#include <iostream>
namespace SBProcThreads
{
void * ProcThread(void* defArg)
{
std::cout<<"### :"<<__PRETTY_FUNCTION__<<": ThreadId :"<<(pthread_self())<<": ###"<<std::endl;
}
}


int main()
{
pthread_t pThreadId;
::pthread_create(&pThreadId,NULL,SBProcThreads::ProcThread,NULL);
}

更新:您的程序还有一些其他问题。例如,很可能 main 会在您的线程运行之前退出。如果你想确保它首先退出,你应该加入你的线程。使用原始 pthreads 是学习线程的好方法,但与一些现有的框架相比可能非常痛苦 - 如果你只想启动并运行 as ,请尝试 boost::thread 或 std::thread尽可能少的麻烦。

关于c++ - pthread_create::无法使用类型为 'void *(*)(void *)' 的右值初始化类型为 'void *' 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22917422/

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