3

プロセスをより効率的にするために、アプリケーションを複数のスレッドで実行しようとしています。Qt の Web サイトで、QFuture役立つテンプレート クラスを見つけました。私は彼らの例のように使用しようとしています。以下は私のクラス宣言/定義の一部です。

class PreferencesWindow {
public:
    PreferencesWindow(QWidget *parent = 0);
public slots:
    void dbsChanged();
}

PreferencesWindow::PreferencesWindow(QWidget *parent = 0) {
    QFuture<void> fns = run(dbsChanged);
}

実行しようとすると、(この 1 行から) 次のような 48 個のエラーが発生します。

error C2780: 'QFuture<FunctionObject::result_type> QtConcurrent::run(FunctionObject *,const Arg1 &)' : expects 2 arguments - 1 provided

どこが間違っていますか?別のスレッドでそのスロットを実行するにはどうすればよいですか?

なぜ私はこれが欲しいのですか? このメソッドの実行には最大 30 秒かかる場合があります (一部のデータベース設定がチェックされます)。この間、GUI はフリーズし、ユーザー エクスペリエンスが低下するため、これは良い解決策だと思います。

4

2 に答える 2

0

dbsChanged()メンバー関数です。実行するオブジェクトを提供する必要があります。オブジェクト自体にそれが必要な場合は、次を使用しますthis

PreferencesWindow::PreferencesWindow(QWidget *parent = 0) {
    QFuture<void> fns = run(dbsChanged, this);
}
于 2014-06-26T10:20:27.080 に答える