代码之家  ›  专栏  ›  技术社区  ›  Shalom Craimer

如何从C/C++中中止MATLAB m文件函数?

  •  2
  • Shalom Craimer  · 技术社区  · 16 年前

    global 变量名 UserAborted

    function AbortIfUserRequested
        global UserAborted
    
        if (UserAborted == 1)
            error('User Abort');
        end
    end
    
    function UserAbortLongFunction
        global UserAborted
    
        UserAborted = 1;
    end
    

    AbortIfUserRequested UserAbortLongFunction .

    ,并抛出错误。

    3 回复  |  直到 16 年前
        1
  •  5
  •   Mr Fooz    16 年前

        2
  •  1
  •   whatnick    16 年前

    Matlab需要提供回调函数来显示执行进度,并可能停止执行。谷歌搜索显示,很多人想要这个,但Mathworks没有实现。

        3
  •  1
  •   Andrew Janke    16 年前

    Matlab的单线程特性可能会阻止全局变量值的更新在第一个函数执行时传播。您可以尝试在Java对象(如HashMap)中粘贴中止标志,作为间接层。由于Java对象是通过引用传递的,因此其状态的更新可能会立即可见,而不需要更改Matlab变量本身。

    function AbortIfUserRequested
        global SharedState
        if SharedState.get('UserAborted')
            error('User Abort');
        end
    end
    
    function UserAbortLongFunction
        global SharedState
        SharedState.put('UserAborted', 1);
    end
    
    function InitUserAbort
        global SharedState
        SharedState = java.util.Collections.synchronizedMap(java.util.HashMap());
        SharedState.put('UserAborted', 0);
    end
    

    function AbortIfUserRequested
       if getappdata(0, 'UserAborted')
          error('User Abort');
       end
    end
    function UserAbortLongFunction
       setappdata(0, 'UserAborted', 1);
    end