- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试处理大量的 csv 数据,因为它是成 block 的。如果我在没有线程的情况下运行 chunkprocess,应用程序不会崩溃。但是,一旦我添加到线程池中,应用程序就会崩溃并引发以下错误。 ChunkProcess run 仅发出(除此之外)信号 shared_ptr,它是 ChunkProcess 的私有(private)成员。在网上阅读文章后,我发现 shared_ptr 不是线程安全的,除非你复制它......那么有没有办法在将它用作信号时制作它的拷贝?
ASSERT: "!d->ref.isShared()" in file tools\qlist.cpp, line 162
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.
QObject::~QObject: Timers cannot be stopped from another thread
void MainWindow::parseCSV(QString file_name)
{
QFile file(file_name);
if (!file.open(QIODevice::ReadOnly))
return;
QThreadPool *threadPool = QThreadPool::globalInstance();
QList<QList<QByteArray>>* data = new QList<QList<QByteArray>>;
int count = 0;
while (!file.atEnd()) {
++count;
QByteArray line = file.readLine();
data->append(line.split(','));
if ( count > 10000 ) {
ChunkProcessor* chunkprocess = new ChunkProcessor(data);
connect(chunkprocess,
SIGNAL(finished(std::shared_ptr<customClass::ProcessedData>)),
this,
SLOT(readingFinished(std::shared_ptr<customClass::ProcessedData>)));
// threadPool->start(chunkprocess);
// threadPool->waitForDone();
chunkprocess->run();
delete data;
data = new QList<QList<QByteArray>>;
count = 0;
}
}
delete data;
}
void MainWindow::readingFinished(std::shared_ptr<customClass::ProcessedData> data)
{
emittedData.append(data);
qInfo()<<"got to finish reading";
}
最佳答案
ASSERT: "!d->ref.isShared()" in file tools\qlist.cpp, line 162
这意味着断言在 QListData
中失败了(QList 的私有(private)部分)。这与 shared_ptr
无关. Qt source没有阐明这个断言检查的内容,但我猜你在 QList
上做了一些非法的事情。或者你有某种竞争条件。很难说,因为您没有显示代码的相关部分。
QObject::~QObject: Timers cannot be stopped from another thread
这意味着您的 QObject
(很可能是 ChunkProcessor
)从另一个线程中销毁,并且此对象正在运行事件计时器。
假设这是 ChunkProcessor
的问题您可以通过几种方式修复它:
ChunkProcessor
ChunkProcessor
的所有权到胎面池( autoDelete()
应该返回 false
)注意崩溃与 shared_ptr
无关!
还有一个问题是你注册了吗std::shared_ptr<customClass::ProcessedData>
作为类型?
如果你不这样做,它将不会通过信号槽机制(因为你使用了自动连接类型)!
关于c++ - Qt shared_ptr 信号与 QThreadPool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45969457/
谁能提供一个使用 QThreadPool 类中的“reserveThread”和/或“releaseThread”的例子?我已阅读文档,但我真的不明白您何时会使用这些功能。互联网搜索示例已空空如也。
我目前正在使用 QThreadPool 来运行一些计算,但是我发现如果我将所有东西都扔进 QThreadPool,它实际上表现不佳并且似乎导致了一些崩溃问题。所以我的想法是一次只有几个线程传递到 QT
我正在“搞乱”线程池,我注意到一个奇怪的异常。所以我在这里问你:我是否正确使用了这个对象?或者您认为这只是一个错误或一个虚拟警告?这里是。我用 QThreadPool 实现了一个基本示例(它与文档中的
在尝试 QThreadPool 之前,我认为多线程程序可能会产生不确定的结果,具体取决于操作系统如何调度它。不过,今天我的看法有点改变。 这是来自 main.cpp 的代码: runnableInst
我正在寻找一些关于使用 QThreadPool 的简明示例。这是我的使用方法: QThreadPool *thread_pool = QThreadPool::globalInstance(); My
如何覆盖 PyQt5 QThreadPool ?是否可以 ? 关注这篇文章https://www.learnpyqt.com/tutorials/multithreading-pyqt-applica
我目前正在将共享指针与 QThreadPool 一起用于多线程应用程序。但是,当线程完成计算时,我遇到了崩溃。 假设类 A 继承自 QRunnable,当传入共享指针作为参数时,它会更新其类变量。这是
我正在编写一个路径跟踪器,并希望通过线程将其并行化。我有一个关于 QT 中多线程对象的设计问题,特别是关于 QRunnable 类。 在我下面的(伪代码)中,我有一个启动 PTRunnable 实例的
我有很多长时间运行的任务在我的 Python 应用程序的后台运行。我把它们都放在了全局QThreadPool中。当用户退出时,所有这些后台任务都需要停止。 现在,我有以下代码: app.aboutTo
我想并行运行 pyqt5 QThreads,但我的代码似乎按顺序运行,有人能告诉我如何并行运行 QThreads 吗? 我的代码的输出:我预计它是并行运行的,而不是按顺序运行的。 Multithrea
我想将多线程 webkit 与 QThreadPool 一起使用 我的代码是: webkitrunnable.cpp: webkitRunnable::webkitRunnable(QUrl inpu
我有一个应该在线程中运行的类,并且需要一个事件循环用于插槽,目前我用 moveToThread() 运行它很好, 但我想使用 QThreadPool我遇到了一个问题。 当使用 QThreadPool
我正在尝试处理大量的 csv 数据,因为它是成 block 的。如果我在没有线程的情况下运行 chunkprocess,应用程序不会崩溃。但是,一旦我添加到线程池中,应用程序就会崩溃并引发以下错误。
我正在做一个使用 QSqlDatabase 的项目。现在我正在使用 QtConcurrent (QFuture) 来执行任何 SQL 命令。 现在,使用 QFuture 运行的每个新命令都会创建新的
我知道一般的理论,线程,QRunnable 和 QThreadPool。它是如何适应的?我的意思是当 QRunnable 的一个实例被创建并分配给 ThreadPool 时,启动一个线程意味着什么?多
我正在构建一个小型多线程 Web 服务器。 QTcpSockets 在主线程中获取,然后由 QtConcurrent 移交给 QThreadPool,后者最终处理数据并发出答案。 我的问题是套接字是在
在应用程序中使用 QThreadPool::globalInstance() 时,我可以将最大线程数设置为一个数字(例如本例中的 50) QThreadPool::globalInstance()->
我在阅读 Qt 的信号与槽 [1] 时注意到它声称信号和槽的开销比任何新操作或删除操作都要低得多。所以我做了一个测试: #include #include #include #include
背景: 我有一个脚本,允许我通过来自私有(private)编辑器的 API 对 PostgreSQL 数据库进行空间查询(我无法直接查询数据库)。该 API 适用于 python 3.2。简而言之,该
我对 QThreadPool 的工作原理感到困惑,并且找不到答案。我想要这样的东西: class Task : public QRunnable { solve problem #nb } 现在,例如
我是一名优秀的程序员,十分优秀!