2012-06-06 2 views
2
나는 그들이 와서 같은 디렉토리에있는 파일에 데이터 분석을 수행 할 필요가

.MATLAB 이벤트와 무한 수면 또는 확인 루프

내가 더 나은 경우 알고 싶습니다

,

  1. 디렉토리에 이벤트 리스너를 구현하고 활성화 될 때 분석 프로세스를 시작합니다. 그런 다음 프로그램을 영원히 잠자 오게하십시오 : while(true), sleep(1e10), end

  2. 또는 변경 및 반응을위한 루프 폴링이 있어야합니다. 하나는 두 개의 새로운 파일이 거의 동시에오고 있지만, 두 가지 이벤트의 결과로 두 번 분석을 시작할 수 있습니다로

나는 개인적으로, 청취자 방식을 선호합니다. 다른 솔루션은 첫 번째 및 두 번째 새 데이터를 찾은 후 처리 할 수 ​​있습니다.
옵션 1에 대한 추가 아이디어 : frames=java.awt.Frame.getFrames을 호출하고 com.mathworks.mde.desk.MLMainFrame-frame에 일치하는 indexframes(index).setVisible(0)을 설정하여 matlab GUI를 숨길 수 있습니다. (이 아이디어는 Yair Altman에서 가져옴)

그런 것들을 실현하는 다른 방법이 있습니까?

답변

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 기반 인 경우에는 수행 할 작업이 없으며 사용자가 그림을 닫으면 프로그램이 종료되었습니다. 이벤트 콜백은 버튼 클릭과 똑같이 실행됩니다. 프로그램이 스크립트와 같은 경우 무한 루프를 사용할 수 있습니다. 여기에서

상세 정보 : 실제로 http://www.mathworks.com/help/matlab/matlab_external/working-with-net-events-in-matlab.html

+0

이었다 즉, 내가 옵션 번호 1을 구입 할 제안 무엇을 - 그러나 이것은 스크립트해야, 그것은 영원히 기다려야한다? 어쩌면 이것은 생각입니다. 그러나 입력을 위해 열려 있습니다 ... –

+1

@BastianEbeling : 프로그램이 이벤트 기반이 될 것입니다 (콜백 함수 내부에서 데이터 분석을 실행하십시오). 좋은 해결책 btw +1 – Amro

+1

@Andrey : 내가 아는 바로는, 이것은 파일 변경에 대해서만 발생하며 파일을 추가/삭제하지 않습니다. 당신은 그 이벤트들도들을 필요가있다 – Amro