对外部程序的非阻塞调用,不会丢失返回码

2024-04-17

当从 Matlab 中启动外部程序(为了简洁起见,我们将其称为“EX”)时,我可以这样做

[status, result] = system('EX.exe');

它将阻塞直到 EX 返回,或者像这样

[status, result] = system('start EX.exe');

它立即返回到 Matlab,但无法获取 EX 的返回码。

完成后,如果在 Matlab 中仍然可以使用 EX 的返回代码,那就太好了。这将是调用 Matlab 脚本来注意到 EX 可能遇到的任何问题的最简单方法。另一方面,我希望 Matlab 在 EX 运行时做其他事情,例如显示有关进度的信息。因此,调用必须是非阻塞的。

我尝试通过启动 EX 来解决这个明显的冲突,如上面第一个示例中所述。为了能够在 EX 繁忙时运行一些其他代码(显示进度信息),我将此代码放入一个函数中,并通过使用具有较小 StartDelay 的计时器来调用该函数。

不幸的是,这并没有提供真正的多线程(如果没有并行计算工具箱,Matlab 似乎无法提供这种功能),即如果计时器回调中的代码运行时间超过 EX,则执行会再次阻塞,直到计时器回调返回。更糟糕的是:由于我不知道 EX 将运行多长时间,因此计时器回调必须无休止地运行,直到它停止或传递一些告诉它停止的标志。我尝试使用全局变量,甚至将此标志存储在应用程序数据中,如下所示:

setappdata(0, 'running', 1);

tim = timer(...
    'StartDelay', 2, ...
    'TimerFcn',   'while getappdata(0, ''running''), fprintf(''timer running ...\n''); pause(1); end' ...
);

fprintf('Starting timer.\n');
start(tim);

fprintf('Calling external program ...\n');
[s,r] = system('EX.exe');
fprintf('External program returned %d.\n', s); % <-- This is never reached.

setappdata(0, 'running', 0);

fprintf('Stopping timer.\n');
stop(tim);
delete(tim);

调用 system() 之后的代码似乎永远不会被执行,并且计时器回调永远运行...有没有其他方法可以让它工作,或者它真的是系统的返回值还是非阻塞调用?


我不确定 MATLAB 是否具有对生成进程的本机/内置支持。不过,您可以使用 MATLAB 中的 Java 来实现它。

例如,

>> runtime = java.lang.Runtime.getRuntime();
>> process = runtime.exec('program arg1 arg2');
>> ...
>>
>>   % when you want to collect results.
>> process.waitFor(); % block until program returns.
>> process.exitValue(); % fetch process return code.
>>
>>   % or, if you need to abandon the work,
>> process.destroy(); % violently kill process
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对外部程序的非阻塞调用,不会丢失返回码 的相关文章

  • 当 MATLAB 发生错误时如何继续循环?

    我正在使用函数将一些 dat 文件转换为 mat 文件 我在循环内调用此函数来转换多个文件 在某些情况下 我的 dat 文件已损坏 函数无法转换并发生错误 从而停止循环 现在我的问题是 是否有任何命令 当错误发生时 它应该跳过循环中的当前
  • Matlab,如何获取imagesc生成的结果?

    我读过一些类似的文章 但它们不是我想要的 得到imagesc之后的矩阵 https stackoverflow com questions 14364239 get the matrix after imagesc 14364434 143
  • MATLAB 引擎函数的输入参数

    我正在尝试使用 MATLAB 引擎在 Python 中调用 MATLAB 函数 但遇到一些问题 在设法将 NumPy 数组作为函数的输入处理后 现在 MATLAB 出现一些错误 MatlabExecutionError 未定义输入函数 si
  • 从彩色背景中提取黑色对象

    人眼很容易辨别black来自其他颜色 但是计算机呢 我在普通的A4纸上打印了一些色块 由于组成彩色图像有青色 品红色和黄色三种墨水 所以我设置每个块的颜色C 20 C 30 C 40 C 50 以及其余两种颜色是 0 这是我的源图像的第一列
  • 有没有办法在 MATLAB 中执行函数内联?

    我可以使用什么语言功能或开箱即用的技巧来完成 MATLAB 中的函数内联 令人烦恼的是 Google 搜索 matlab 内联函数 http www google com search q matlab inline function揭示了
  • 带 if 语句的可向量化 FIND 函数 MATLAB

    我有一个矩阵u 我想遍历所有行和所有列并执行以下操作 如果元素非零 我返回行索引的值 如果元素为零 则查找该元素之后的下一个非零元素的行索引 我可以使用两个带有 find 函数的 for 循环轻松完成此操作 但我需要多次执行此操作 不是因为
  • MATLAB 中元胞数组的左连接

    I ve 2 cellMATLAB 中的数组 例如 A jim 4 paul 5 sean 5 rose 1 第二个 B jim paul george bill sean rose 我想做一个 SQL 左连接 这样我就可以得到 B 中的所
  • Matlab 中 interp2 的类似 OpenCV Api

    有没有类似的功能 其工作原理与 interp2 x y frame z xd yd linear 0 在 OpenCV 中 功能cv remap 几乎可以满足您的要求 请参阅文档here http docs opencv org modul
  • 与超类和子类构造函数接口

    我在 matlab 文档和之前有关使用 matlab 继承和类构造函数创建接口的问题中找不到帮助 为了使其整洁 放在一个包内 我可以将其压缩如下 而不是拖拽代码 一套 MyPkg有一个超类Super和一些子类Sub1 Sub2 我的大多数属
  • 将输出从符号数学 (sym) 转换为浮点型

    我的问题类似于这个问题 https stackoverflow com questions 11114101 how to convert mupad symbol i sqrt 1 to i in matlab 11114959 1111
  • 如何选择部分密集数据集的均匀分布子集?

    P是一个 n d 矩阵 持有nd 维样本 P某些地区的密度是其他地区的几倍 我想选择一个子集P其中任意样本对之间的距离大于d0 并且我需要将其传播到整个区域 所有样本都具有相同的优先级 无需优化任何内容 例如覆盖面积或成对距离之和 这是执行
  • 查找数组中元素之间的平均差异的有效方法

    希望标题不会让人困惑 通过例子来展示很简单 我有一个像这样的行向量 1 5 6 我想找到每个元素之间的平均差异 此示例中的差异为 4 和 1 因此平均值为 2 5 这是一个小例子 我的行向量可能非常大 我是 MatLab 新手 那么有没有一
  • matlab矩阵中求子矩阵的通用方法

    我正在寻找一种 好 方法来在更大的矩阵 任意维数 中找到矩阵 模式 Example total rand 3 4 5 sub total 2 3 1 3 3 4 现在我希望这样的事情发生 loc matrixFind total sub 在
  • 在 C/C++ 中调用 MATLAB API

    我刚刚从某处听说 对于数值计算 MATLAB 确实提供了一些用户友好的 API 如果你在 C C 代码中调用这些 API 你可以显着加快计算速度 但我在MATLAB文档中没有找到这样的信息 例如http www mathworks com
  • 将组合字符串和数字输入的元胞数组写入文本文件

    考虑以下 DateTime 2007 01 01 00 00 2007 02 01 00 00 2007 03 01 00 00 Headers Datetime Data Dat 100 200 300 Data DateTime num
  • 在 MATLAB 中用两个值替换向量值

    我必须创建一个以向量作为输入的函数v和三个标量a b and c 该函数替换了的每个元素v等于a有一个二元素数组 b c 例如 给定v 1 2 3 4 and a 2 b 5 c 5 输出将是 out 1 5 5 3 4 我的第一次尝试是尝
  • 估算缺失数据,同时强制相关系数保持不变

    考虑以下 excel 数据集 m r 2 0 3 3 0 8 4 0 1 3 2 1 5 2 2 3 1 9 2 5 1 2 3 0 2 0 2 6 我的目标是使用以下条件填充缺失值 将上述两列之间的成对相关性表示为 R 大约 0 68 将
  • MATLAB:比较两个不同长度的数组

    我有两个长度不同的数组 由于采样率不同 需要比较 我想对较大的数组进行下采样以匹配较小的数组的长度 但是该因子不是整数而是小数 举个例子 a 1 1 375 1 75 2 125 2 5 2 875 3 25 b 1 2 3 有什么方法可以
  • 傅里叶变换定理 matlab

    我目前正在尝试理解二维傅里叶位移定理 根据我到目前为止所了解到的情况 图像空间中的平移会导致相位差异 但不会导致频率空间中的幅度差异 我试图用一个小例子来演示这一点 但它只适用于行的移位 而不适用于列的移位 这是一个小演示 我只在这里显示幅
  • 在 Matlab 中显示有理数

    我有两个整数 m n 它们一起形成 m n 形式的有理数 现在我只想以这种理性的形式在 Matlab 中显示它们 我可以通过这样做来做到这一点 char sym m n 所以 如果 例如m 1 n 2 Matlab将显示1 2 然而 如果m

随机推荐

  • 如何在 php 中“$_POST”返回同一页面或不同的结果页面? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我写了一个php文件计算器 php将结果发布到info php 我写了另一个 php 文件 计算器2 php将结果发布到同一页面 我怎样才能
  • java中对象和引用的区别与代码?

    public class TestVO public static void main String args VO vo1 new VO VO vo2 new VO VO vo3 VO vo4 new VO vo1 setName Sou
  • php获取多维数组的唯一值[重复]

    这个问题在这里已经有答案了 可能的重复 php多维数组删除重复项 https stackoverflow com questions 1861682 php multi dimensional array remove duplicate
  • Tomcat8 Gzip 压缩 CSS、JS

    我正在使用 tomcat8 并尝试模拟 CSS 和 JS 的 GZIP 压缩 我已在 server xml 中添加了条目 如下所示
  • angularjs指令动态设置模板url

    我正在使用模板 URL 创建指令 我想根据 user role 动态设置模板 URL 任何想法 这是我的指令代码 RatingRX directive headermenu gt directive directive restrict E
  • d3.js:如何创建“力导向图集群”

    我一直在探索 d3 js 库 尤其是力导向图创建 我仔细阅读了 Bostock 等人关于它的论文 并注意到我正在尝试创建的精确类型的图表 基本上是一个力导向图 其中带有围绕羽毛组的颜色编码区域 这是第三列第二行的插图 此处标记为 力导向图簇
  • 从其他容器访问mysql容器

    我已经使用暴露 3306 的 mysql 设置了 docker 容器 我已经指定了数据库用户 数据库密码并创建了一个测试数据库并将权限授予新用户 在另一个容器中 我想访问这个数据库 因此 我使用一个简单的 php 脚本设置了新容器 该脚本在
  • 首先将外键映射到 EF 代码中的非主代理键列

    public class A DatabaseGenerated DatabaseGeneratedOption Identity public virtual int Aid get set public virtual ICollect
  • 选择元素时,CSS 中的插入符号 ^ 有何用途?

    我在文件中遇到了这样的 css 选择器 contactDetails ul li a a href tel 像这样的抑扬符 在 CSS 中没有定义的含义 两字符运算符 可用于属性选择器 http www w3 org TR selector
  • 使用字节将字母数字代码解码为键值对象

    我有一个来自 CS GO 游戏的 十字准线代码 CSGO O4Jsi V36wY rTMGK 9w7qF jQ8WB 我可以使用此函数解码一些值 import BigNumber from bignumber js Intentionall
  • Mongodb php查询,在数组中搜索?

    我正在寻找一种在具有以下结构的 answer 文档数组中搜索关键字 例如 Henrik 的方法 Array id gt MongoId Object id gt 4eeedd9545c717620a000007 formId gt 6 re
  • 使用纬度/经度计算从 A 点到线段的距离

    我正在开发一个使用 GPS 的 Android 应用程序 我想知道如果 新位置 C 点 距离线段 AB 太远 是否有办法可以丢弃 GPS 位置数据 我正在使用发现的点到线段公式在维基百科上 http en wikipedia org wik
  • 在MySQL php中将ID从一个表插入到另一个表

    我有两张桌子 一张是Information另一个是work force 信息 劳动力 当 的时候addInformation 接到电话 我想将数据插入到信息 以及id这是自动增量将插入表workForce 列 twf 这是我尝试过的 添加信
  • 在 BPMN 中用一个任务表示 while 循环的正确方法是什么?

    BPMN 中表示仅重定向到一个任务的简单 while 循环的正确方法是什么 我想说使用循环活动是更好的选择 因为它有助于保持流程模型整洁 在流程中创建循环时也要小心 因为任务定义通常在第一次迭代和第二次迭代之间发生变化 例如第一次迭代是创建
  • 如何使应用程序的触摸栏在 macOS 上始终可见?

    我正在做macOS 菜单栏应用程序 https vidr io显示全屏覆盖 用户可以通过菜单栏中的滑块控制该叠加层的不透明度 我希望将这些控件移至触摸栏 因为该应用程序用于屏幕录制 并且会记录主屏幕上的干扰 我的应用程序中的滑块应该像默认情
  • Spring Security 3.1.0 - 无法从 HTTPS 切换到 HTTP

    我是 Spring Security 的新手 所以我制作了一个小型 Web 应用程序 以便尝试它并找到对我正在从事的项目有用的配置 我强制通过 HTTPS 访问登录页面 登录后需要切换回 HTTP 换句话说 登录页面 仅限 HTTPS 其他
  • iPhone开发-设置UIWebView字体

    我必须显示从服务器提取的富文本 所以我使用 UIWebView 现在的问题是我无法控制 UIWebView 中使用的字体 如何更改字体以使用系统字体 使其与应用程序的其余部分一致 我现在正在做这样的事情 myRichTextView UIW
  • 如何在 AWS CloudWatch Insights 中按字段聚合日志,然后按 bin 聚合日志?

    我正在尝试执行一个查询 该查询将首先按字段计数聚合 然后按bin 1h 例如我想得到如下结果 Date Field Count 1 2019 01 01T10 00 00 000Z A 123 2 2019 01 01T11 00 00 0
  • 存档的 macOS 应用程序启动时显示空白窗口

    我有一个 macOS 应用程序 其中包含一个 ViewController 可以重命名应用程序窗口并调整其大小 有几个按钮 以及一个在启动时加载默认网页的 WKWebView 该项目本身是一个 xcworkspace 文件 因为它包含用于
  • 对外部程序的非阻塞调用,不会丢失返回码

    当从 Matlab 中启动外部程序 为了简洁起见 我们将其称为 EX 时 我可以这样做 status result system EX exe 它将阻塞直到 EX 返回 或者像这样 status result system start EX