2011-01-20 5 views
3

私はいくつかのデータ処理を行うOmniWorker-Taskを作成しています。
これまでのところ、タスクは他のタスクとの間でメッセージを送受信できます。IOmniWorker:タスク内で実行する関数はどこにありますか?

ここでは、このタスクのmain関数を実装する必要があります。この関数は継続的に実行され、データ処理を行いますが、メッセージはその動作を変更します。

しかし、この主な機能はどこに配置しますか?
実装する必要があるOmniWorkerの「実行」メソッドのようなものはありますか?

答えて

6

実際には、TOmniWorkerは 'モノリシック実行ブロック+メッセージング'イディオムを実際にサポートしていません。 TOmniWorkerの背後にある全体のアイデアは、一般的なシングルスレッドDelphiアプリケーションのように、ほとんどのコードがメッセージハンドラ(もちろんそれらから呼び出されるコード)で実行されるということです。

特別なメッセージ( 'Start!')を送信してメッセージハンドラで実行を開始できますが、メッセージハンドラが実行されている間はメッセージは処理されません。 [もっと具体的には、それらを送信することはできますが、受信したい場合は、Task.Comm.Receive経由で手動で行う必要があります。]各TOmniWorkerはシングルスレッド環境であり、メッセージハンドラを実行します。それ以外は何もできません。

+1

ありがとうございます。私がやりたいことに対して、おそらくより良いアプローチがありますか?基本的には、executeメソッドとメッセージ処理を持つスレッドが必要です。可能であれば、OTLを使用します。 – Holgerwa

+4

長い処理をしていて、長い処理が実行されている間にメッセージを処理したい場合は、この長い処理の途中で自分でメッセージを受信する必要があります。良い方法はありません。 – gabr

関連する問題