这有点类似于:pthread function from a class
但是最后调用的函数是引用this指针,所以不能使它成为静态的。
void * Server::processRequest()
{
std::string tmp_request, outRequest;
tmp_request = this->readData();
outRequest = this->parse(tmp_request);
this->writeReply(outRequest);
}
void * LaunchMemberFunction(void * obj)
{
return ((Server *)obj)->processRequest();
}
然后是pthread_create
Server SServer(soc);
pthread_create(&handler[tcount], &attr, (void*)LaunchMemberFunction,(void*)&SServer);
错误:
SS_Twitter.cpp:819:错误:从void *无效转换为void *()(void ) SS_Twitter.cpp:819:错误:初始化int pthread_create的参数3(pthread_t *,const pthread_attr_t *,void *()(void ),void *)
答案 0 :(得分:2)
您正在将第三个参数转换为void* ((void*)
,然后收到错误,因为void*
无法转换为函数指针。
我相信如果你只使用&LaunchMemberFunction
,它应该编译。
答案 1 :(得分:0)
摆脱LaunchMemberFunction前面的(void *)。它既不必要又不正确,以及错误的原因。该语言不会隐式地从void *转换为指向函数类型的指针,这是您编写的代码所需要的。 pthread_create的那个参数已经是正确的类型,没有理由将它转换为其他类型。
答案 2 :(得分:0)
在您定义的函数中,我看不到输入参数类型,请使用以下
void * Server::processRequest(void)
{
std::string tmp_request, outRequest;
tmp_request = this->readData();
outRequest = this->parse(tmp_request);
this->writeReply(outRequest);
}
第二件事,您不必只使用一个函数指针,如下所示
pthread_create(&handler[tcount], &attr, &LaunchMemberFunction,(void*)&SServer);
答案 3 :(得分:-1)
问题出在演员身上。您正在将函数指针强制转换为无法隐式转换为void*
的{{1}} - 这是void (*)(void*)
为第三个参数接受的类型。
您不需要将参数转换为确切类型,但如果必须,则为:
pthread_create