Qt 撤消/重做和线程
Qt undo/redo and threads
在我的MDI应用程序中,我使用Qt撤消/重做框架,它运行良好。
现在我已经实现了一个需要大量时间的操作,所以我想在另一个线程中运行它,以便应用程序不会冻结,用户可以同时在其他 MDI 窗口上工作。
所以我必须在QUndoCommand
的redo()
方法内的新线程中运行该操作。这是一个问题,因为:
- 如果我在线程完成的
redo()
方法中等待,应用程序会冻结,因此毫无用处。 - 如果我不等待线程完成,
redo()
方法会在操作完成之前返回,这可能会导致很多问题和错误(例如,如果用户使用撤消/重做机制,则线程命令后面的命令可能会在完成之前执行(。
知道吗?
您遇到的问题比撤消/重做要大得多。更改体系结构,以便在进行异步数据处理时系统行为是合理的。数据管理器对象应指示何时繁忙,UI 应反映这一点。一旦你让它正常工作,撤消/重做也会神奇地工作。
相关文章:
- 我的C++线程做错了什么?
- 每个线程 C++ 保护以防止重入函数调用
- 为什么线程对类变量所做的更改没有影响?
- 如何做 gtkmm 线程安全队列绘制?
- Qt 撤消/重做和线程
- 在 OpenMP 中重置线程局部变量
- 是包含线程局部变量重入的函数
- 将线程之间的标准输入/输出重定向
- 将 std::cout 从单独线程中的 DLL 重定向到 QTextEdit
- 线程出口上的重生线
- 多线程时,您该怎么做才能停止堆栈空间
- 多线程应用程序,我做得对吗
- QObject可重入性和线程安全性
- linux中的pthread_mutex_t是可重入的吗(如果线程试图获取它已经持有的锁,则请求成功)
- C++线程:联接到底做什么
- C++ GTK 线程.我做得对吗
- 将参数从主线程传递到线程.当线程退出时,主线程将重置为0.为什么?
- 线程之间的Qt连接类型:为什么这样做
- Web 工作者比本机线程重还是轻
- 让线程按顺序重做打印函数