gpt4 book ai didi

C、linux - 挂起线程直到一些数据到达

转载 作者:行者123 更新时间:2023-11-30 17:46:02 25 4
gpt4 key购买 nike

我想创建一个线程,它将等待来自文件描述符(串行端口)的数据。到时候我必须能够通过这个端口发送数据。

我尝试使用pthreadpoll,但程序从一开始就挂起( sleep ),甚至不在主函数中执行第一个命令。

问题肯定是轮询函数 - 当我限制一个时间时,所有指令都在该时间之后执行。

这是我的代码:

#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;
}

最佳答案

您可以使用select()等待文件描述符,直到有一些数据可供读取。

您可以阅读here关于使用。

关于C、linux - 挂起线程直到一些数据到达,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19471903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com