利用开发板的两个串口,一个从GPS读取信息,并将经纬度显示与界面,然后从另一个串口将提取到的信息上传至GPRS。现在我的主界面是一个主线程,数据接收(从串口一)用了一个次线程。数据上传(串口二)又用了一个次线程。现在的问题是数据能接受,但是不能上传。
串口都是打开的,单独的接收发送没问题。
贴次线程代码
RecvThread::RecvThread()
{
fd=-1;
}
void RecvThread::run() {
comm();
while(true)
{
read(fd,comm_str,25);
if(comm_str[24]==126)
emit sendData( );
}
}
int RecvThread::comm()
{
struct termios oldtio,newtio,oldstdtio,newstdtio;
struct sigaction sa;
fd = open(COM1,O_RDWR ); //| O_NOCTTY |O_NONBLOCK);
if (fd <0) {
perror(COM1);
return -1;
}
tcgetattr(0,&oldstdtio);
tcgetattr(fd,&oldtio);
tcgetattr(fd,&newstdtio);
newtio.c_cflag |= CLOCAL |CREAD;
cfsetispeed(&newtio,B57600);
cfsetospeed(&newtio,B57600);
newtio.c_cflag &= ~CSIZE;
newtio.c_cflag |=CS8;
newtio.c_cflag &=~CSTOPB;
newtio.c_cflag &=~CRTSCTS;
newtio.c_iflag = IGNPAR;
newtio.c_oflag = 0;
newtio.c_lflag = 0;
newtio.c_cc[VMIN]=1;
newtio.c_cc[VTIME]=0;
tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&newtio);
sa.sa_flags = 0;
sigaction(SIGCHLD,&sa,NULL);
}
另一个次线程代码类似,只不过是写串口。将接收到的数据发出去。想问下,怎么把两个次线程连接起来?可不可以通过信号槽,试了一下,不太行。