我想创建将等待来自文件描述符(串行端口)的数据的线程。在那个时候我必须能够通过这个端口发送数据。
我试图使用pthread和poll,但是程序从一开始就挂起(休眠),甚至不在 main 函数中执行第一个命令。
问题肯定是轮询功能 - 当我限制时间时,所有指令都在此时间之后执行。
这是我的代码:
#define SERIAL_DEVICE "/dev/ttyUSB0"
#define SERIAL_BAUD 2400
#include <wiringSerial.h>
#include <stdio.h>
#include <pthread.h>
#include <poll.h>
//deklaracje
void *receiving( void *ptr )
{
printf("New thread started");
int fd= (int)ptr;
struct pollfd fds[1];
fds[0].fd = fd;
fds[0].events = POLLIN ;
int pollrc=-1;
while(1)
{
pollrc = poll( fds, 1, -1);
if (pollrc < 0)
{
perror("poll");
}
else if( pollrc > 0)
{
if( fds[0].revents & POLLIN )
{
unsigned char buff[1024];
ssize_t rc = read(fd, buff, sizeof(buff) );
if (rc > 0)
{
printf("RX: %s",buff);
}
}
}
}
}
int main(int argc, char *argv[])
{
int fd = serialOpen(SERIAL_DEVICE, SERIAL_BAUD);
if (fd<0)
{
printf("Serial opening error");
return 1;
}
pthread_t serialReceiver;
printf("-----");
int thr=pthread_create(&serialReceiver,NULL,receiving,fd);
printf("%i",thr);
if(thr!=0)
{
printf("Error during creating serialReceiver thread.");
return 1;
}
int status;
pthread_join(serialReceiver,(void **)&status);
printf("%i",status);
return 0;
}