2

ディレクトリ内のファイルが入ってくるときに、データ分析を実行する必要があります。

知りたいのですが、もっといいのなら、

  1. ディレクトリにイベントリスナーを実装し、アクティブ化されたときに分析プロセスを開始します。次に、プログラムを永久にスリープ状態にします。while(true), sleep(1e10), end

  2. または、変更と反応をループポーリングする必要があります。

私は個人的にリスナーの方法を好みます。ほぼ同時に入ってくる2つの新しいファイルで2回分析を開始できますが、結果として2つのイベントが発生するからです。他のソリューションは最初のソリューションを処理し、その後2番目の新しいデータを見つける可能性があります。
オプション1の追加のアイデア:-frameを呼び出しframes=java.awt.Frame.getFramesて設定frames(index).setVisible(0)することにより、 indexmatlabGUIを非表示にしますcom.mathworks.mde.desk.MLMainFrame。(このアイデアはYair Altmanから引用したものです)

そのようなことを実現する他の方法はありますか?

4

1 に答える 1

5

この場合(Windowsを使用している場合)、最良の方法はの力を使用することです.NET

fileObj = System.IO.FileSystemWatcher('c:\work\temp');
fileObj.Filter = '*.txt';
fileObj.EnableRaisingEvents = true;
addlistener(fileObj,'Changed',@eventhandlerChanged);

さまざまなイベントタイプがあり、それらに同じコールバックを使用することも、異なるものを使用することもできます。

addlistener(fileObj, 'Changed', @eventhandlerChanged );
addlistener(fileObj, 'Deleted', @eventhandlerChanged );
addlistener(fileObj, 'Created', @eventhandlerChanged );
addlistener(fileObj, 'Renamed', @eventhandlerChanged );

eventhandlerChangedコールバック関数はどこにありますか。

function eventhandlerChanged(source,arg)
   disp('TXT file changed')
end

sleep使用したりポーリングしたりする必要はありません。プログラムがUIベースの場合、他に何もする必要はありません。ユーザーがFigureを閉じると、プログラムは終了します。イベントコールバックは、ボタンのクリックとまったく同じように実行されます。プログラムがスクリプトのようなものである場合は、無限ループを使用できます。

詳細はこちら: http: //www.mathworks.com/help/matlab/matlab_external/working-with-net-events-in-matlab.html

于 2012-06-06T14:01:51.423 に答える