Qt:QBuffer线程在此代码中是否安全
Qt: Is the QBuffer thread safe in this code?
代码给出如下:
class USBCamCaptureThread : public QThread
{
Q_OBJECT
void run() {
while (!threadQuit){
if (imageReaded){
buffer->reset();
Request = http->get (url->path(),buffer););
}
MG::SLEEP::msleep(250);
}
}
public:
USBCamCaptureThread(){
QFile file("setting_files/cameraIP.txt");
QString line = "192.168.1.5:80"; //default value
if(file.open(QIODevice::ReadOnly)) {
QTextStream in(&file);
line = in.readLine();
}
file.close();
url = new QUrl(line);
http = new QHttp(this);
buffer = new QBuffer(&bytes);
threadQuit = false;
imageReaded = true;
}
~USBCamCaptureThread(){
}
public slots:
void Finished(int requestId, bool error){
QImage localImage;
localImage.loadFromData(bytes);
QImg = localImage;
bytes.clear();
emit signalUSBImageRead();
}
请注意,Done() 在主线程中,run() 在工作线程中。可能的问题是通过读取/写入单独线程中的字节和缓冲区,它会导致与线程相关的问题吗?
如果在
run
处于活动状态时调用Finished
,那么是的,您有问题。 在管道中运行的两个线程之间共享数据(串行)不一定是问题。 同时访问两个线程之间的非线程安全共享数据始终是一个问题。 我已经很多年没有使用Qt了,所以QBuffer
或QImage::loadFromData
也可以提供自己的线程安全保证。
相关文章:
- 此代码是否违反一个定义规则
- C++ LeetCode #377 的 DP 解决方案中,此代码是否有错误?
- 在cpp中使用boost-python的python代码是否进行动态内存分配
- 使用全局 IP 地址时,C++ winsock 2 应用程序中的代码是否必须更改?
- 以下代码是否存在内存泄漏?
- 如何判断我正在运行的Microsoft C++代码是否使用 /EHa 开关编译?
- 我的选择排序代码是否存在导致它跳过数组中的元素的问题?
- 代码是否有效.如果我想显示第一个元素?如果不是,那么 s.begin() 会返回什么?
- C++模板的对象代码是否在可执行文件和动态库中重复?
- 任何人都可以检查这个回文 c++ 代码是否正确
- Android Studio 项目中的 c++ 代码是否最终出现在 apk 文件中(除了 .so 文件)
- 此代码是否容易受到 SQL 注入的攻击?我该如何使其安全
- 使用 log4cplus 将日志发送到远程系统日志服务器的代码是否正确
- 代码是否交换数组的两个数字
- 如何检查编译的代码是否使用了 SSE 和 AVX 指令?
- 此代码是否有逻辑错误
- 使用 char16_t 类型作为 char[] 数组,并通过 reinterpret_cast<> 重新转换它。我的代码是否有未定义的行为?
- GPU cuda 代码是否适用于多个 GPU 卡而无需任何实现
- 此代码是否对C++线程安全
- QaudioOutput代码是否有任何内存泄漏