QByteArray 通过队列连接按值发出并连接并附加到竞争条件?
QByteArray emited and connected by value through QueuedConnection and appended to race condition?
我有一个信号newData(int type, QByteArray data)
作为队列连接到slotNewData(int type, QByteArray data)
,然后我发出两个数据回调,如下所示
emit newData(OEI_DataParserV2_base::OEI_CBT_DOUBLE, dp_v2_databuff_);
uint32_t sec;
uint32_t usec;
dataParserV2->getDataTimestamp(sec,usec);
dp_v2_databuff_.append(reinterpret_cast<const char*>(&usec), sizeof(usec));
dp_v2_databuff_.append(reinterpret_cast<const char*>(&sec), sizeof(sec));
emit newData(OEI_DataParserV2_base::OEI_CBT_TIMESTAMP_DOUBLE, dp_v2_databuff_);
我希望我的插槽接收没有附加时间戳的数据,然后接收带有附加时间戳的数据。但是,我有时会看到数据返回带有额外附加时间戳的OEI_CBT_DOUBLE
类型。我看到 QByteArray 是隐式共享的,但数据应该在写入时复制。Qt文档特别指出
请注意,原子引用计数不能保证线程安全。在线程之间共享隐式共享类的实例时,应使用正确的锁定。这与所有可重入类(无论是否共享(的要求相同。但是,原子引用计数确实保证了在隐式共享类的本地实例上工作的独立线程是安全的。我们建议使用信号和槽在线程之间传递数据,因为这可以在不需要任何显式锁定的情况下完成。
QByteArray::append 不应该创建我的dp_v2_databuff_的深层副本吗?我应该通过 const ref 还是按值通过队列连接传递我的 QByteArrays?
因此,引起此讨论的错误现已解决。QByteArray 在此代码的每次迭代中都会附加到此代码中,因此在粘在代码末尾的时间戳会越来越大。
相关文章:
- 当套接字连接断开时检测C/C++Unix
- 无法在windows上使用mingw将sqlite3与c连接
- 到连接组件算法的问题(递归)
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- 无法在C++中建立与MySQL数据库的连接
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- 使用 bfs 解决连接组件问题时得到错误的答案
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 如何修复valgrind启动时的致命错误(与libc6-dbg和libc6-dbg:i386连接)
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- OSX蓝牙打开RFCOMMChannelAsync声称已连接,但未建立连接,并且从未调用过委托
- 在 libcurl 连接池中预创建连接
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- libcurl 和 DNS ttl 中的内部连接管理
- 如何应用 libcurl 的持久连接选项
- compare_exchange C++函数如何确定竞争条件?
- 提升 ASIO - io_service 不要等待连接到线程
- QByteArray 通过队列连接按值发出并连接并附加到竞争条件?