在Linux开发时碰到了一种情况,在QT的线程里面开Linux 的时候会出先很多问题。这是由于Linux开发用的c语言编写,而QT是基于C++的,所以在对函数进行编译的时候会有所差距,下面先看看错误问题
我有一个函数名字叫sss,如下所示:
void sss(int sockfd)
{
int sendbytes;
char buf[BUFFER_SIZE];
while (1) {
if(tc==1)
{
memset(buf, 0, sizeof(buf));
sprintf(buf, "%d%d%d%d", ada,adb,ada1,adb1);
//发送消息给服务器端
if ((sendbytes = send(sockfd, buf, strlen(buf), 0)) == -1)
{
printf("send");
}
tc=0;
}
}
}
在Linux下函数是这样调用的:
pthread_create(&th_com1, NULL,sendtcp, sockfd);
在linux调试成功。
当我加入QT界面时,在QThread中会报空指针的错误,说只接受void类型的指针。调了好久,最后想到了将类型进行强转,使用void的指针,并且不传值,只传地址
改为:
void *sendtcp(void *sockfd1)
{
int sockfd = *(int*)sockfd1;
int sendbytes;
char buf[BUFFER_SIZE];
while (1) {
if(tc==1)
{
memset(buf, 0, sizeof(buf));
sprintf(buf, "%d%d%d%d", ada,adb,ada1,adb1);
//发送消息给服务器端
if ((sendbytes = send(sockfd, buf, strlen(buf), 0)) == -1)
{
printf("send");
}
tc=0;
}
}
}
pthread_create(&th_com1, NULL,sendtcp, &sockfd1);
问题解决。