2

一定時間後に関数を呼び出すための簡単なクロスプラットフォームの方法を探しています。関数を早期に強制終了するオプションもあります。

time = window.setTimeout("alert('Hello');", 500);javascriptがとでどのように機能するかに似ていますif(time) clearTimeout(time)

これは、追加の(非標準の)ライブラリやフレームワークがなくても、基本的なC ++で可能ですか?もしそうなら、あなたは私に正しい方向への指針を与えることができますか?

-

私がこれを行っている理由は、最初の数回は3/4秒かかり、待機カーソルを表示するDBクエリがあるためですが、クエリがキャッシュされ、カーソルが点滅して待機すると、少しばかげている/気が散るように見えます。その後、通常の状態に点滅します。

御時間ありがとうございます!

4

2 に答える 2

0

関数の呼び出しはブロッキング操作です。私はあなたが望む行動を概算するためのいくつかの方法を考えることができます...

タイムスライシング: 関数に作業の短いセグメントを実行させ、全体的な目標を段階的に進めます。x時間が経過するまで繰り返し呼び出すことができます。

マルチスレッド: 別のスレッドで関数を実行します。ただし、スレッド間で関数の結果を同期するには、持っていないマルチスレッドを理解する必要がある場合があります。一定の時間が経過した後で操作を本当に強制終了したい場合は、スレッドを強制的にシャットダウンできますが、おそらくそうしたくないでしょう。おそらく、終了するたびに終了させたいと思うでしょう(メインスレッドをブロックしないので、ユーザーを煩わせることはありません)。

使用しているGUIライブラリを使用すると、後のオプションが簡単になる場合がありますが、何を使用しているかわかりません。

于 2012-08-17T14:19:09.637 に答える
0

簡単な解決策の1つは、実行する関数、ミューテックス、キャンセルフラグ、およびタイムアウトを使用してスレッドをスパンすることです。スレッド関数はこのすべてのパラメーターを受け取り、指定されたタイムアウトの間スリープし、ミューテックスをロックしてフラグをチェックします。フラグが設定されていない場合、実行される関数が呼び出されます。

機能をキャンセルする必要がある場合は、キャンセルフラグを設定しながら、ミューテックスをロックする必要があります。

スレッド引数の処理が複雑になる可能性があるため、それらをすべてまとめて構造体にし、構造体を動的に割り当て、インスタンスまたはshared_ptrを、関数呼び出しをキャンセルして1つのshared_ptrを渡す場所の構造体に保持します。スレッド関数。

于 2012-08-17T14:41:55.017 に答える