• 欢迎访问,如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

pthread_create创建多线程,报错问题,请教,急

C语言 码拜 3年前 (2017-04-21) 162次浏览
在一个读写的程序中,本人计划用线程去做,其中int FmSend(int fd, char *send_buf,int data_len);//发送信息
为了能将FmSend放到线程中处理,建了一个结构体
/*线程一:发送包参数结构体*/
typedef struct
{
int fd;
char *send_buf;
int data_len;
}SendParameter;
主调用函数如下
int main(int argc,char **argv)
{ int fd;                            //文件描述符
int err;                           //返回调用函数的状态
int len;
char send_buf[]= “1232434434”;  //初始化,
char rcv_buf[100];
pthread_t id_read,id_write;
int ret;
fd = FmOpen(fd,”/dev/ttyUSB0″);   //打开串口,返回文件描述符
err = FmInit(fd,38400,0,8,1,”N”);
if(err >0)
{
printf(“Set Port Exactly!\n”);
}
else
printf(“Set Port Inexactly!\n”);
/*创建线程一*/
//    //设置分离属性
//    pthread_attr_t attr;
//    pthread_attr_init(&attr);
//    pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
SendParameter SendPara;
SendPara.fd = fd;
SendPara.send_buf = send_buf;
SendPara.data_len = sizeof(send_buf);
ret = pthread_create(&id_read,NULL,void*(&FmSend)(void*),&(SendPara));
if(ret!=0)
{
printf(“Create pthread error!\n”);
return -1;
}
//    len = FmSend(fd,send_buf,sizeof(send_buf)); //发送命令数据
//    if(len > 0)
//    printf(“send data successful\n”);
//    else
//    printf(“send data failed!\n”);
printf(“receive data is :\n”);
while (1) //循环读取数据
{
len = FmRecv(fd,rcv_buf,sizeof(rcv_buf));
if(len > 0)
{
rcv_buf[len] = “\0”;
printf(“%s\n”,rcv_buf);
//    printf(“len = %d\n”,len);
}
else
{
printf(“cannot receive data\n”);
FmClose(fd);
return 0;
}
sleep(2);
}
return 1;
}
提示Multiple markers at this line
– Syntax error
– expected expression before ‘void’
– too few arguments to function
即pthread_create处报错
问一下怎么修改
解决方案

20

偶遇到相似问题都是用
“每次用/*…*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。”
的方法解决的。
编译时添加命令行参数 -lpthred

20

将你的int FmSend(int fd, char *send_buf,int data_len);改成(或封装)相似这种原型:void *FmSend(void *sndParam),在调用pthead_ceate()。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明pthread_create创建多线程,报错问题,请教,急
喜欢 (0)
[1034331897@qq.com]
分享 (0)