2014-02-05 3 views
1

Matlab과 멀티 스레드의 고전적인 문제가 있습니다.Matlab의 프로세스에 타이머를 적용하는 방법

내 Matlab 버전이 Visual Studio 2013을 인식하지 못하기 때문에 MEX를 사용할 수 없습니다. 간단한 Parallel Computing Toolbox로 해보고 싶습니다.

내 문제 :

블록의 모든 때까지 완료되어, 나는 GUI를 가지고 몇 가지 무거운 계산은 특정 지점에서 시작합니다. 이 계산은 몇 시간 동안 지속될 수 있으며 일시 중지하고 어떻게 진행되는지 확인하고 매개 변수를 미세 조정할 수 있기를 원합니다. 그래서 서면으로 버튼이 있습니다. PAUSE. 물론 모든 것이 차단 되었기 때문에이 작업을 수행하지 않습니다.

나는 타이머를 만드는 것을 생각하고 있었다. 매 10 초마다 처리가 멈추고, PAUSE가 눌려지면 PAUSE가 실행되고, 그렇지 않으면 계속 진행한다. 타이머의 콜백이 처리되어 차단되기 때문에 여전히이 기능이 작동하지 않습니다.

의견이 있으십니까? 당신이 대화 상자를 닫습니다 때마다

h=helpdlg('press okay to pause') 
while true 
    if ~ishandle(h) 
     keyboard; 
     h=helpdlg('press okay to pause'); 
    end 
    pause (3) 
    disp('simulating') 
end 

~ishandle(h) 사실이되고 keyboard 루프를 중지 :

답변

1

나는 해결책을 발견했다. 나는 같은 문제가있는 사람을 위해 여기에 게시한다. 당신이 작업을 사용할 수있는 parrallel의 computin 도구 상자에서 ... :

function Pause_Callback(hObject, eventdata, handles) 
    %% Now this works. No Need for a Timer. 
    %% Timer would work too. 
end 

function Start_Callback(hObject, eventdata, handles) 
    myCluster = parcluster; 
    MyJob = createJob(myCluster); 
    createTask(MyJob,@MyFunction,1,{In}); 

    submit(MyJob); 

    Out = fetchOutputs(MyJob); 
end 

function Out = MyFunction(In) 
    %%% Heavy Computing 
end 

희망이 답장을 보내 주셔서 감사합니다 (난 당신이 그렇게 할 수 몰랐어요),

+0

이 솔루션을 정확히 사용하는 방법은 무엇입니까? –

2

이 하드 코딩 중단 점을 사용하여 계산을 일시 중지 아주 기본적인 방법입니다.

+0

안녕 다니엘을 할 수 있지만, 매우 깨끗하지 않다 해결책. – Yann

+0

'dbcont'로 중단 한 후에도 계속 진행할 수 있다는 것을 알아두면 좋습니다. 내가 링크 된 스레드에이 응답을 게시하고 싶을 수 있습니다. –