QtConcurrent::map 分割故障
当我尝试使用qtconcurrent :: map: 实现"并行"时 QFuture parForAsync(size_t n, std::function Op) { size_t nThreads = static_cast(QThreadPool::globalInstance()->maxThreadCount()); size_t nn = n/nThreads + 1; using Sequence = QVector>; Sequence vFuns; for(size_t i = 0; i n ? n : i + nn;
2 2023-07-25
编程技术问答社区
QObject::killTimer: 无法从另一个线程停止计时器
我在MainWindow中有一个QGraphicsView,我在UI中创建了它(当然是基本线程),我想从另一个线程上设置QGraphicsScene. so在MainWindow的构造函数中,我有: MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ... connect(this,&MainWindow::graphSceneSignal,this,&MainWindow::graphSceneSlot); ... QFuture future; future = QtConcurrent::run(this,&MainWindow::generateGraph); ... } 和MainWindow::generateGraph我有: void MainWindow::generateGraph() { ...
10 2023-07-25
编程技术问答社区
QObject无法为处于不同线程中的父代创建子代
嗨,我需要从背景进行一些插座通信,我对此使用了QtConcurrent::run,但是给了我警告. QObject: Cannot create children for a parent that is in a different thread. (Parent is MainWindow(0x7fff3e69f500), parent's thread is QThread(0x16f8070), current thread is QThread(0x17413d0) 这是代码, MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),ui(new Ui::MainWindow){ ui->setupUi(this); QFuture f2 = QtConcurrent::run(this,&MainWindow::checkCamStatus); }
38 2023-07-17
编程技术问答社区
Qt通过QConcurrent::run终止线程生成
平台:win7 x64,mingw-rubenvb(4.7.2-x64),QT 4.8 说我使用QConcurrent :: Run,如下: ,我几乎没有冗长的任务(读取总体文件,写入总体文件和运行模拟). void MainWindow::runLengthyJob() { /* some setup */ jobWatcher->setFuture(QConcurrent::run(theApp, &AppClass::lengthyJob)); // lengthyJob - can be readPop(), writePop(), runSim() } 通常,这些任务至少需要15秒才能完成(为了模拟,需要超过几个小时).为了防止尚未到尚未完成的线程,我重新实现MainWindow :: Closeevent如下: void MainWindow::closeEvent(QCloseEvent *event) { /* wait
12 2023-07-17
编程技术问答社区
是否可以在父级子目录项目中修改QT qmake变量?
我有类似结构的共享库项目: library.pro: TEMPLATE = subdirs CONFIG += ordered SUBDIRS += libs plugins test_programs ... QT += concurrent ... # Those files contains pure interfaces (C++ abstract classes) # with no implementation, and some helper classes with inline implementation. # So there is no reason to create yet another subproject for them HEADERS += iface/IInterface1.h \ iface/IInterface2.h \ # IInterface2 needs QtConcurrent
14 2023-07-17
编程技术问答社区
如何从QtConcurrent::run函数(或类似的)向QFutureWatcher传递一个progressText?
如果我使用QtConcurrent::run启动某些功能,并使用QFutureWatcher进行监视未来,那么如果我可以在该异步执行功能中做任何事情,以传达一些进度的文本,这将导致这种情况. QFutureWatcher触发其progressTextChanged信号? ie我想做的是 喜欢: void fn() { ???->setProgressText("Starting); ... ???->setProgressText("halfway"); ... ???->setProgressText("done!"); } QFutureWatcher watcher; connect(&watcher, SIGNAL(progressTextChanged(const QString&)), &someGuiThing, SLOT(updateProgress(const QString&))); connect(&watcher, SIGNAL(
4 2023-07-17
编程技术问答社区
如何使用QtConcurrent::run的重载函数
我目前正在尝试并行化代码,因此我正在使用QtConcurrent::run,问题是,运行不知道要选择哪个功能. 是否有一种使用超载功能运行的方法,还是我找到了某种解决方法? 解决方案 您只能static_cast确保过程中没有歧义的指针 void hello(QString name) { qDebug() f1 = run(static_cast(
36 2023-07-17
编程技术问答社区
使用QtConcurrent来加载一个Pixmap并绘制它
我正在尝试创建一个瓷砖渲染程序.这是一些基本代码. 标题 class Tile: public QGraphicsItem { public: Tile(void); ~Tile(void); QGraphicsPixmapItem *tileItem; void update(QPainter *painter, const QStyleOptionGraphicsItem *option,QWidget *widget); protected: QRectF boundingRect() const; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,QWidget *widget); }; cpp: .Constructor etc . . void Tile::paint(QPainter *painter, const QStyleOptionGraphicsIte
32 2023-07-17
编程技术问答社区
使用QtConcurrent::run在独立的线程上连接信号/槽点
在我的应用程序中,我在对话框中具有以下代码: connect(drive, SIGNAL(FileProgressChanged(Progress)), SLOT(OnFileProgressChanged(Progress))); QtConcurrent::run(this, &ProgressDialog::PerformOperation, Operation, *Path, OutPath, drive); 性能函数最终调用发出信号FileProgressChanged的函数,而我的OnFileProgressChanged函数如下: void ProgressDialog::OnFileProgressChanged(Progress p) { if (ui->progressCurrent->maximum() != p.Maximium) ui->progressCurrent->setMaximum(p.Maximium);
54 2023-07-17
编程技术问答社区
在QT中使用QtConcurrent进行多线程处理
我正在开发QT中的应用程序,在某个时候,该应用程序处理了一堆视频. 它运行良好,但在过程阶段中只有40-60%的CPU使用情况,因此我试图使其进行多线程. 我使用qtConcurrent,导致他的"高leveness"而不是传统的线程管理,我的代码简单: for(int i = 0; i futureToken = QtConcurrent::run(this, process, listOfVideos.takeFirst()); QFutureWatcher* fw = new QFutureWatcher(); connect(fw, SIGNAL(finished()), this, SLOT(manageResult)); fw->setFuture(futureToken); }
20 2023-07-16
编程技术问答社区
QRunnable-如何使用它,示例
可以使用qrunnable作为QTConcurrent的替代方案指出某些代码:我在qtdoc中找不到任何qrunnable示例. 您是否曾经尝试过Qrunnable和QtConcurrent进行同一应用程序,并且您能评论比较性能吗? 解决方案 QRunnable是一个接口.因此 doc.qt.io/qt-4.8/thread-basics.html#example-1- using-the-the-thread-pool 如果您在该页面上的进一步阅读,则它会提到QTConcurrent中的实际值是当您执行类似于将STL算法应用于STL容器的事情时.使用Qrunnable的线程池更好,因为您只需执行一堆相当无关的任务. QTConcurrent建立在Qthreadpool的顶部.它在符号上很方便,可以使您不必自己编写模式,但不会内在地加快您可以手工代码的速度.但是...从QTConcurrent模式(例如MapReduce)方面进行思考可能会帮助您看到您不会想到
78 2023-07-16
编程技术问答社区
在一个工作线程中创建的QObject的线程亲和性会发生什么,该线程随后终止了。
假设我调用QtConcurrent::run()在工作线程中运行函数的QtConcurrent::run(),在该功能中,我动态分配了几个qobjects(供稍后使用).由于它们是在工作线程中创建的,因此其线程亲和力应该是工作线程的线程.但是,一旦工人线程终止,qObject螺纹亲和力不应再有效. 问题:QT是自动将QObject移动到父线程中,还是我们负责将其移动到有效线程之前,在工作人员线程终止之前? 解决方案 QThread未记录在完成后自动移动任何QObject,因此我认为我们已经可以得出结论,它没有这样做.这种行为将非常令人惊讶,并且与其余的API矛盾. 仅出于完整性,我用QT 5.6进行了测试: QObject o; { QThread t; o.moveToThread(&t); for (int i = 0; i
46 2023-07-16
编程技术问答社区
QtConcurrent::map() 的成员函数 = 不能编译
我的项目是创建一个小程序,以展示搜索引擎的工作:任意查询的索引和返回结果.我已经使用索引部分完成了工作,现在我想一次通过多个文件进行索引. MainWindow类在这里: class MainWindow : public QMainWindow { Q_OBJECT ..... private: Indexer * indexer; QStringList fileList; .... void index(QStringList list); void add(const QString &filename); } 这是add的实现(add需要访问fileList以避免再次索引相同的文件,因此不能是静态方法): void MainWindow::add(const QString &filename) { if (!fileList.contains(filename)) { in
126 2023-07-16
编程技术问答社区
具有成员函数的QtConcurrent
我创建了一个QFUTURE,我想使用该QFUTURE将呼叫并行化到成员函数.更确切地说,我有一个与.h: 的类解决方案 class solverParallel { public: solverParallelData(Manager* mgr_); virtual ~solverParallel(void); void runCompute(solveModel * model_); bool resultComput(); private: Manager *myMgr; QFuture myFutureCompute; }; methode runco​​mpute()正在创建myfuturecompute成员. .cpp看起来像 solveParallel::solveParallel(Manager* mgr_) :m_mgr(mgr_) { } solverParallel::~solverParallel(void
66 2023-07-16
编程技术问答社区
可以取消的QFuture,并报告进展情况
QFuture类具有cancel(),progressValue()等的方法.显然可以通过A QFutureWatcher来监视这些方法.但是,QtConcurrent::run()的文档读取: 请注意,Qfuture返回 qtConcurrent :: run()不支持 取消,暂停或进步 报告.返回的QFUTURE可以 仅用于查询 运行/完成状态和返回 功能的值. 我徒劳地看了什么方法 can 创建QFuture,可以取消并报告单个长期运行的进度. (看起来可能QtConcurrent::map(),类似的功能可以,但是我只有一个长期运行的方法.) (对于那些熟悉.net的人,类似于BackgroundWorker类.) 有哪些选项可用? 解决方案 对于长期运行的单个任务,要注意的一件事是,如果您覆盖QThread::run()并将任务放在此处,则无法从那里发出信号运行线程.在此其他解决方案 尽管已经发布并回答了已经有一段时间了,但我决定添加解决此问题
12 2023-07-16
编程技术问答社区
是否可以使用QtConcurrent::run()与一个类的函数成员一起使用?
我似乎只能将QtConcurrent::run()与一个方法(类的功能成员)与简单函数相关联.我怎样才能做到这一点? 使用常规功能,我无法发出信号,并且它的阻力.为什么有人会发现这是QThread的更好替代方案,这超出了我的范围,想要一些输入. 解决方案 是的,这是可能的(而且很容易). 这是一个示例(来自QT文档): // call 'QStringList QString::split(const QString &sep, SplitBehavior behavior, Qt::CaseSensitivity cs) const' in a separate thread QString string = ...; QFuture future = QtConcurrent::run(string, &QString::split, QString(", "), QString::KeepEmptyParts, Qt::CaseS
6 2023-07-16
编程技术问答社区
使用QtConcurrent来加载一个Pixmap并绘制它
我正在尝试创建一个瓷砖渲染程序.这是一些基本代码. 标题 class Tile: public QGraphicsItem { public: Tile(void); ~Tile(void); QGraphicsPixmapItem *tileItem; void update(QPainter *painter, const QStyleOptionGraphicsItem *option,QWidget *widget); protected: QRectF boundingRect() const; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,QWidget *widget); }; cpp: .Constructor etc . . void Tile::paint(QPainter *painter, const QStyleOptionGraphicsIte
16 2023-04-06
编程技术问答社区
std::bind, this 和 QtConcurrent
我试图使用std::bind将this绑定到QtConcurrent::blockingMapped 中使用的方法 标题: class TuringMachine { private: TRTable table; std::set currentConfigs; //function object std::function( const TuringMachine*, ConfigNode*)> step_f; //method it will hold std::set step(TuringMachine* this_m ,ConfigNode *parent); std::set& makeStep(); } 来源: TuringMachine::TuringMa
32 2023-02-28
编程技术问答社区
std::bind, this 和 QtConcurrent
我试图使用std::bind将this绑定到QtConcurrent::blockingMapped 中使用的方法 标题: class TuringMachine { private: TRTable table; std::set currentConfigs; //function object std::function( const TuringMachine*, ConfigNode*)> step_f; //method it will hold std::set step(TuringMachine* this_m ,ConfigNode *parent); std::set& makeStep(); } 来源: TuringMachine::TuringMa
44 2023-02-28
编程技术问答社区
停止由QtConcurrent::run启动的线程?
是否可以通过关联的 QFuture 对象来停止线程?目前我一直在开始这样的视频捕捉过程. this->cameraThreadRepresentation = QtConcurrent::run(this,&MainWindow::startLiveCapturing); 在 startLiveCapturing-Method 内部,一个无限循环正在运行,用于捕获图像并显示它们.因此,如果用户想要停止该过程,他只需按下一个按钮,该操作就会停止.但似乎我不能通过调用这样的取消方法来停止这个线程? this->cameraThreadRepresentation.cancel(); 我做错了什么以及如何停止该线程或操作. 解决方案 来自QtConcurrent的文档::运行: 请注意,QtConcurrent::run() 返回的 QFuture 不支持取消、暂停或进度报告.返回的QFuture只能用于查询函数的运行/结束状态和返回值. 你可以做的是在你的主窗
1356 2022-08-11
编程技术问答社区