adb*_*dba 4 c++ qt multithreading
我是Qt编程的新手.我必须做一些需要很长时间的计算.我使用一个编辑框和两个名为"开始"和"停止"的按钮.编辑框用于初始化."开始"按钮开始计算.在计算进行的同时,我必须能够随时停止计算.但是当我通过单击开始按钮开始计算时.正如预期的那样,在计算完成之前,我无法单击窗口上的任何组件.
我想在计算执行时正常使用窗口上的组件(尤其是停止按钮).但我对线程并不擅长,我正在寻找一种更简单的方法.有没有简单的解决方案?
Tam*_*lei 16
有几种选择.
子类QRunnable并使用QThreadPool在单独的线程中运行它.要与UI通信,请使用信号.这样的例子:
class LongTask: public QRunnable
{
void run()
{
// long running task
}
};
QThreadPool::globalInstance()->start(new LongTask);
Run Code Online (Sandbox Code Playgroud)
请注意,您无需担心管理线程或QRunnable的生命周期.对于通信,您可以在启动QRunnable之前连接自定义信号.
这是一种不同的方法,可能不适合您的问题.基本上,它的工作方式如下:您可以处理长任务的未来返回值.当您尝试检索返回值时,它会立即将其提供给您,或者等待任务完成(如果尚未完成).例:
QFuture<int> future = QtConcurrent::run(longProcessing, param1, param2);
// later, perhaps in a different function:
int result = future.result();
Run Code Online (Sandbox Code Playgroud)
你可能不需要这个,但也不难.这个与#1非常相似,但你需要自己管理线程.例:
class MyThread : public QThread
{
public:
void run()
{
// long running task
}
};
QThread* thread = new MyThread(this); // this might be your UI or something in the QObject tree for easier resource management
thread.start();
Run Code Online (Sandbox Code Playgroud)
与QRunnable类似,您可以使用信号与UI进行通信.
| 归档时间: |
|
| 查看次数: |
1370 次 |
| 最近记录: |