void MyThread::run() { while (1){ if(USB_Read_Start){ int ret = USB_Read_Process(rx_usbcan_fifo_data[rx_usbcan_fifo_data_push], 500); // 调用USB_Read_Process函数,获取接收到的20个字节数据 //这段代码调用了USB_Read_Process函数,该函数的作用是从USB设备中读取数据,并将数据存储在Rx_dat_buf缓冲区中,读取的超时时间为5000毫秒。 //函数的返回值为一个整数类型的变量ret,表示读取数据的状态。 //具体而言,函数可能会返回以下值: //如果返回值大于0,ret是返回的读取的字节数 //如果返回值为0,则表示收到的数据长度为0,也就是没有成功接收到任何数据 //如果返回值为-1,表示读取数据失败,可能是由于USB设备连接错误或者其他原因导致。 //如果返回值为-2,表示读取数据超时,即在规定的时间内没有读取到数据。 //如果返回值为-3,表示读取数据错误,可能是由于传输的数据出现了错误或者其他原因导致。 if(ret <0 ) return; else//如果正常接收到USB数据则...... { USB_RX_shuliang++; } } } }为什么 这个程序在没有USB数据时run会退出while循环
时间: 2024-03-31 21:36:08 浏览: 62
mythread_test.rar_qt thread_run
在这段程序中,`USB_Read_Process()` 函数是一个阻塞式的函数,当没有数据可读时,程序会一直阻塞在这个函数中,直到读取到数据或者超时为止。因此,当没有 USB 数据可读时,`USB_Read_Process()` 函数将一直阻塞,并且 `run()` 方法在 `while` 循环中也会一直等待,这将导致线程被阻塞,无法继续执行。
但是,在 `while` 循环中,没有对 `USB_Read_Start` 变量进行判断,如果 `USB_Read_Start` 变量的值为 `false`,那么线程将会一直卡在 `while` 循环中,无法继续执行。因此,如果没有 USB 数据可读,而且 `USB_Read_Start` 变量的值为 `false`,那么程序将会一直卡在 `while` 循环中。
如果你希望线程在没有 USB 数据可读时能够继续执行,可以修改程序,增加一个超时等待的机制,例如使用 `QWaitCondition` 和 `QMutex` 等线程同步机制实现等待超时功能,或者使用 `QTimer` 定时器来定期检查是否有可读的数据。
阅读全文