2014-10-25 1 views
0

루프에서 실행되는 MATLAB 코드가 있습니다. 코드는 꽤 무겁고 시간이 많이 걸립니다. Ctrl-C를 사용하는 대신 런타임에 GUI 콜백을 사용하여 함수를 중단하는 방법을 찾고 있습니다. 나는 다음과 같이 설계된 코드를 가지고있다.코드를 사용하여 런타임시 matlab 함수를 중단하는 방법은 무엇입니까?

function test 
    figure; 
    uicontrol('pos',[20 20 40 20],'string','abort','fontsize',12, 'callback', 'error(''p'');'); 
    k=0; 
    while(k<10000) 
    m=1:10000; 
    x = rand(size(m)); 
    for t=1:10000 
     x=x+sin(2*pi*m*0.02 + mod(t, 5)*pi); 
    end 
    % other code will be run here 
    plot(m, x); 
    drawnow; 
    k=k+1 
    end 
end 

위의 코드를 예로 들었다. 나는 그것이 최적화 될 수 있었다는 것을 안다. 그러나 나는 그것에 대해 지금 염려하지 않는다. 난 그냥 위의 코드가 작동하지 않는 이유를 알고 싶습니다. 'error'함수가 실행 된 콜백은 코드를 중단하지 않습니다. 어떻게 작동 시키는가? 감사.

답변

0

오류 콜백이 루프 내에서 호출되지 않습니다. 따라서 오류 콜백과 루프는 독립적 인 프로세스입니다.

당신은 이런 식으로 함수를 디자인 할 수 있습니다 :

function test 
     figure; 
     AbortButton = uicontrol('Style','togglebutton','pos',[20 20 40 20],'string','abort','fontsize',12);%, 'callback', 'error(''p'');'); 

     k=0; 
     figure; 
     while(k<10000) 
      val = get(AbortButton,'val'); 
      if (val == 0) 
      m=1:10000; 
      x = rand(size(m)); 
      for t=1:10000 
       x=x+sin(2*pi*m*0.02 + mod(t, 5)*pi); 
      end 
      % other code will be run here 
      plot(m, x); 
      drawnow; 
      k=k+1; 
      elseif (val == 1) 
       break; 
      end 
     end 
    end 

이 초보적인 방법이지만, 도움이 될 수 있습니다.

관련 문제