当我使用“libusb_fill_bulk_transfer”异步传输数据时,存在读取数据丢失的情况,每次只有“libusb_fill_bulk_transfer”中设置的缓存存满时,它才进入回调函数。这是正常吗
伪代码:
bool QUniversalSerialBus :: UsbOpen()
{
// libusb1.0.22
int rc;
rc = libusb_open(usbDevice,&dHand);
if(rc!= 0)
{
qDebug()<<“libusbOpen文件:”<< rc;
返回false;
}
rc = libusb_claim_interface(dHand,0);
if(rc!= 0)
{
qDebug()<<“libusb_claim_interface file:”<< rc;
返回false;
}
异步读取();
//
返回true;
void QUniversalSerialBus :: AsyncRead()
{
int rc = 0;
m_read_transfer_mutex.lock();
qTransfer = libusb_alloc_transfer(0);
readBuffer.resize(1024);
libusb_fill_bulk_transfer(qTransfer,dHand,130,reinterpret_cast(readBuffer.data()),1024,&callbackRevc,this,0);
rc = libusb_submit_transfer(qTransfer);
if(rc < 0)
{
libusb_free_transfer(qTransfer);
qTransfer = nullptr;
qDebug() << "libusb_submit_transfer file:" << rc;
return;
}
}
void QUniversalSerialBus :: callbackRevc(struct libusb_transfer * transfer)
{
if(transfer-> status!= LIBUSB_TRANSFER_COMPLETED){
return ;
}
QUniversalSerialBus* qObj = static_cast(transfer->user_data);
{
QByteArray s((char*)transfer->buffer,transfer->actual_length);
QString str = s.toHex().data();
qDebug() << str;
qObj->Reviceiver(transfer->buffer,transfer->actual_length);
}
libusb_free_transfer(transfer);
transfer = nullptr;
qObj->qTransfer = nullptr;
qObj->readBuffer.clear();
qObj->m_read_transfer_mutex.unlock();
qObj->AsyncRead();
return;
}
请问问题解决了吗?