在我的应用程序中
我有一个MainWindow
(这是一个QtMainWindow
类)和一个Acquisiton
类(这是一个QThread
类)
这是我非常简化的 Acquisiton 课程
//entry point of the thread
void Acquisition::run ()
{
uint8_t* image_addr;
QSharedPointer<uint8_t> image(new uint8_t[IMG_SIZE]);
for (;;)
{
if (isInterruptionRequested())
return;
// here, usb_read() give me the adress of a elem in the ring buffer
img_addr = usb_read(...);
// the ring buffer can possibly be rewritten on the next usb_read() (if bufferlength = 1) so I copy the data into my QSharedPointer
std::memcpy(image.data(), image_addr, sizeof(IMG_SIZE));
// I send this image
emit imageSent(image);
}
}
在我的 MainWindow 中
// the slot for the signal imageSent
void newImage(QSharedPointer<uint8_t> image)
{
// process and draw image
}
我不明白 QSharedPointer 的生命周期(和 std::shared_ptr (想象与 std::shared_ptr 相同的代码)
我的 QSharedPointer 是否始终有效?如果在处理期间(MainWindow),发生 usb_read() 并且 memcpy 写入我的图像,则附加什么。
在一个相关的问题中:在退出前等待槽执行
如果采集线程在数据处理期间停止,我看到 QSharedPointer 使我的数据保持有效。
在这种情况下,是我的信号被取消,我的值被复制到某处还是线程等待我的 MainWindow 完成处理?
谢谢