2009-07-23 20 views
2

私は完了までに長い時間がかかり、完了したかどうか定期的にチェックしたいという方法があります。呼び出しisDoneが実際に行われるべきものの一部を行い、終了と偽とき、trueを返すことも可能である文脈では「長時間実行されているメソッドが完了しましたか」にデザインパターンがありますか?

type 
    IWaitForDone = interface 
    function IsDone: boolean; 
    end; 

function TSomeClass.doSomethingThatTakesLong: IWaitForDone; 
begin 
    Result := TClassThatDoesIt.Create; 
end; 

var 
    Waiter: IWaitForDone; 
begin 
    Waiter := SomeClass.doSomethingThatTakesLong; 
    while not Waiter.isDone do 
    doSomethingElse; 
    Waiter := nil; 
end; 

:これは私が(簡易コード、2007デルファイ)が出ているものですまだ実行されるべき部分がある間に。あるいは、別のスレッドがその作業を完了しているかどうかをチェックするだけで済みます。私はこれを発信者に見せたくありません。

私はこのタイプの問題に遭遇する最初の人ではないと思いますが、この解決策にはすでに名前(デザインパターン?)がありますが、見つけられませんでした。 それは何と呼ばれていますか?

+0

これはWindowsアプリ用ですか? –

+0

はい、それはなぜ重要ですか? – dummzeuch

答えて

2

を示唆前。ここで

は、リンクのカップルです:

この1つは多作.NET開発者であるオレンエイーニです。余談として - それはあなたがなどpattterns、コーディングのベストプラクティスに興味があれば(このリンクからである)彼のブログを読んでも価値がある...

Futures post from Oren Eini ([email protected])

そして、このリンクはあなた次第ですが、私は、私が思いましたそれだけで答えを更新して完了してください。それは/スーツに役立ちますが、AsyncCallsユニットを見てみた場合

Futures link from uni-sb.de

+0

興味深い参照。私はコンセプトの説明とともにhttp://www.ps.uni-sb.de/alice/manual/futures.htmlを見つけました。 (ザンブレッケン大学の大学かもしれないが、私はチェックしなければならないだろう)。 – dummzeuch

+0

リンクdummzeuchありがとう。私はそれと私が見つけた別のリンクを使って私の答えを更新します、それは私が思う未来のものと聞いたところです。興味深いことに、私が参照する人はあなたのリンクを指します。 –

4

Microsoftは、私は、これは '未来' と呼ば見た長時間実行されている方法のための2つのパターン(非同期およびパターンに従ってランデブー呼び出す)

+0

私は、OPが代わりの解決策を探しているわけではないかもしれないと思っていますが、彼の特定の解決策の名前のためです。 – jpfollenius

+0

@masher:そうです。私はちょうど名前がほしい。 – dummzeuch

3

わかりません。

1

あなたの問題を正しく理解しているかどうかは分かりませんが、実際の作業の一部がIsDone関数(面白い文章)で行われているとは思いません。私はそのようなメソッドが、ただのフラグをチェックしてすぐに戻ると期待します。私がIsDoneを継続的に呼び出さず、その後にいくつかの作業を行いIsDoneをチェックすることにしたらどうなりますか?その後、最初の呼び出しまでは何の作業も行われていません。つまり、非同期呼び出しから期待するものではありません。

私は本当にあなたの質問に答えませんでしたが、これは広く使われているデザインパターンではないかと思います。

+0

私の現在のケースでは、長時間実行されているコードはハードウェアにいくつかのコマンドを送信し、答えを待つだけです。答えは別のスレッドで非同期に到着します。だから私は実際にIsDone呼び出しでコマンドを送信し、回答が到着したかどうかをチェックすることを選択しました。 OK、実際には長時間実行されているコードではありません。多くのことをすることなく永遠に終了するだけです。いくつかのIPCメカニズムを使用することは、この場合には過剰です。 – dummzeuch

関連する問題