2013-02-28 3 views
0

메인 GUI는 생성 된 마스터와 모듈 방식으로 독립적 인 하위 GUI를 생성합니다. 입력 인수 만 받지만 출력 인수 나 데이터 종속성은 별도의 비 관련 작업을 수행하므로 .Matlab GUI를 이용한 병렬 처리

현재 설정은 마스터 GUI에서 푸시 버튼을 누르면 하위 GUI가 만들어지고 계산적으로 긴 알고리즘을 수행하고 완료 될 때까지 계속 진행되며 GUI가 삭제됩니다.

아이가 이미있는 동안 마스터 GUI에서 여러 개의 다른 모듈을 열 수있는 기능이 좋겠다고 생각합니다. 예를 들어, GUI 1을 실행하려면 누름 v 튼을 누르고 마스터 GUI로 돌아가고 다른 단추를 눌러 GUI 2를 실행하십시오. 내가 마주 치게되는 문제는 GUI 1이 인터럽트 된 다음 GUI 2가 실행이 끝날 때까지 대기 상태가되고 GUI 1이 중단 된 지점에서 돌아오고 두 곳에서 동시에 실행되도록합니다.

EDIT : 내 문제를 해결했는데,이 작업을 수행하는 추악한 방법이 나왔다. 심지어 GUI를 팝업하지 않지만 필요한 작업을 수행한다. 루프 내에서 어떤 함수가 실행될지를 MATLAB에 알려주기 위해 인덱스 번호 역할을하는 반복과 함께 parfor를 사용해야합니다.

+0

내가 제안한대로 일시 중지 통화를 추가하려고 했습니까? 이렇게하면 추가 창이 표시됩니다. – grantnz

답변

0

pause 명령을 사용하여 기본 병렬 처리를 수행 할 수 있지만 실행 시간이 길면 긴 알고리즘이 주기적으로 pause를 호출해야하기 때문에 약간 방해가됩니다.

function [ output_args ] = BackgroundTask(srcTimer,~, hObject) 
%BackgroundTask - Test background task 

fprintf(1,'Background\n'); 

end 


hObject = 'Some relevant Object'; 
feedbackTimer = timer('Period',1,'TimerFcn', {@BackgroundTask, hObject}, 'ExecutionMode','FixedRate'); 
start(feedbackTimer); 

긴 실행 작업

fprintf(1,'Start\n'); 
for i=1:200000; factorial(100); 
     if mod(i,1000) == 0 
      pause(0.001); 
     end 
end 
fprintf(1,'Finish\n'); 

는 백그라운드 작업을 시작하고 다음 코드를 실행하는 실행하면 당신은 볼 수 : 그것은 또한 Matlab의에보고 가치가있을 수 있습니다

Background 
Background 
Start 
Background 
Background 
Background 
Background 
Background 
Finish 
Background 
Background 

Parallel Computing Toolbox.