gpt4 book ai didi

c++ - Qt编程和计算需要很长时间

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:56:11 25 4
gpt4 key购买 nike

我是 Qt 编程的新手。我必须做一些需要很长时间的计算。我使用一个编辑框和两个名为“开始”和“停止”的按钮。编辑框用于初始化。开始按钮开始计算。当计算正在进行时,我必须能够随时停止计算。但是当我通过单击开始按钮开始计算时。正如预期的那样,在计算完成之前我无法单击窗口上的任何组件。

我想在执行计算时正常使用窗口上的组件(尤其是停止按钮)。但是我不擅长线程,我正在寻找一种更简单的方法。有什么简单的解决办法吗?

最佳答案

有几个选项。

1。子类 QRunnable

子类 QRunnable并使用 QThreadPool在单独的线程中运行它。要与 UI 通信,请使用信号。这方面的例子:

class LongTask: public QRunnable
{
void run()
{
// long running task
}
};

QThreadPool::globalInstance()->start(new LongTask);

请注意,您无需担心管理线程或 QRunnable 的生命周期。为了进行通信,您可以在启动 QRunnable 之前连接自定义信号。

2。使用 QtConcurrent::run

这是一种不同的方法,可能不适合您的问题。基本上,它的工作方式如下:您可以处理长任务的 future 返回值。当您尝试检索 return value ,它会立即将其提供给您,或者等待任务完成(如果尚未完成)。示例:

QFuture<int> future = QtConcurrent::run(longProcessing, param1, param2);

// later, perhaps in a different function:
int result = future.result();

3。子类 QThread

您可能不需要这个,但这也不难。这与#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();

与 QRunnable 类似,您可以使用信号与 UI 对话。

关于c++ - Qt编程和计算需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8300983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com