当前位置: 技术问答>linux和unix
pthread创建线程传递参数的问题
来源: 互联网 发布时间:2016-07-11
本文导语: #include "lthread.h" #include void *clientService(int *socket) { printf("Server thread started!%dn",(int)socket); } int clientThread::creatSevThread(int h_socket) { m_socket=h_socket; pthread_create(&m_clientThread,NULL,clientService,&t); } 我用这段代码...
#include "lthread.h"
#include
void *clientService(int *socket)
{
printf("Server thread started!%dn",(int)socket);
}
int clientThread::creatSevThread(int h_socket)
{
m_socket=h_socket;
pthread_create(&m_clientThread,NULL,clientService,&t);
}
我用这段代码创建线程时编译提示错误,怎么解决?我看论坛里面这样做都可以,这是为什么??
错误:
lthread.cpp: In member function ‘int clientThread::creatSevThread(int)’:
lthread.cpp:19: 错误:从类型‘void* (*)(int*)’到类型‘void* (*)(void*)’的转换无效
lthread.cpp:19: 错误: 初始化‘int pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)’的实参 3
|
#include "lthread.h"
#include
void *clientService(void *socket)
{
printf("Server thread started!%dn",(int)socket);
}
int clientThread::creatSevThread(int h_socket)
{
m_socket=h_socket;
pthread_create(&m_clientThread,NULL,clientService,&t);
}
把那个 int 改成 void 就成了。
|
void *clientService(void *socket)
{
printf("Server thread started!%dn",*((int*)socket));
}
你打印的是地址, 不是内容,所以地址是一定会变的。 你用上面的代码看看。
{
printf("Server thread started!%dn",*((int*)socket));
}
你打印的是地址, 不是内容,所以地址是一定会变的。 你用上面的代码看看。
|
楼上的帮你解决了 我来蹭点分 嘿嘿
|
变了就变了贝。有什么关系。
你只是输出了socket的内存地址而已,在我看来没有任何意义的一个值。