Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab与窗口应用程序的链接_Matlab_Winapi_Message Queue - Fatal编程技术网

Matlab与窗口应用程序的链接

Matlab与窗口应用程序的链接,matlab,winapi,message-queue,Matlab,Winapi,Message Queue,Matlab和.EXE文件的兼容性如何?是否可以让win32 API向matlab发送消息,并让matlab实时读取这些消息 更准确地说,我可以让Matlab实时接收和处理来自另一个应用程序的消息吗 当我处理这些消息时,我还关心我必须在Matlab中使用的循环类型。无限for/while循环是一种好的实践吗 比如说 while(infinite loop) if (received message) do something end end 请注意,以上仅为算法,并非代码。问题的第一部

Matlab和.EXE文件的兼容性如何?是否可以让win32 API向matlab发送消息,并让matlab实时读取这些消息

更准确地说,我可以让Matlab实时接收和处理来自另一个应用程序的消息吗

当我处理这些消息时,我还关心我必须在Matlab中使用的循环类型。无限for/while循环是一种好的实践吗

比如说

while(infinite loop)
if (received message)
    do something
end
end

请注意,以上仅为算法,并非代码。

问题的第一部分:似乎就是您所追求的

问题的第二部分:在许多编码标准中,通常建议避免无限循环。无限循环的问题是,它们可能永远不会结束:)很容易对退出条件进行错误或不完整的编码,从而导致循环永远不会结束,程序的执行也会暂停。这类错误可能会在单元测试中突然出现(通常是退出条件失败),或者只有在第一批客户开始抱怨您的程序崩溃后才会出现(退出条件失败的情况并不常见)。这些(以及许多其他)无限循环的陷阱通常可以通过

  • 将无限循环转换为有限循环
  • 设置迭代次数的最大值
  • 使用完全不同的范式

对于,如果程序的一部分正在侦听来自程序其他部分或其他程序的消息,则最后一个选项是最佳选项。使用循环可以防止无限循环。MATLAB以的形式支持这一点。这是MATLAB的一部分,所以您必须已经遵循OOP,或者将所有必须的内容转换为OOP才能使用它

如果退出条件正确,无限循环就可以了。带条件中断的
while true
循环与
while条件
之间有什么区别?没有区别。你的第二段太离谱了。消息循环永远不会被写为具有最大迭代次数的有限循环。想象一下,当您的程序因为接收到您编码的最大数量的消息而终止时的乐趣。我建议你删除答案的整个部分。@DavidHeffernan:我的论点是,虽然
while condition
while true
在原则上是相同的,但在实践中人们倾向于更有力地实施它。这种虫子我见过太多次了。我也不是说这是一条绝对的规则,永远要遵守。我的意思是,许多人建议避免它们,但不是不惜一切代价。我是说,以处理消息的无限循环的形式编写一个资源占用器是非常容易的(特别是在MATLAB之类的东西中),而事件驱动范式(通常)阻止了这类事情。您认为事件驱动范式是如何实现的?当循环时,我感觉到一个
。你认为
while
循环是有限的,还是迭代次数最多?@RodyOldenhuis谢谢你的回答。对于第一段,它是另一种方式(或者说是混合)。我还想使用Windows应用程序和MatlabGUI。从窗口应用程序接收数据并在Matlab中绘图。我知道WinAPI中存在消息循环。如果可能的话,我认为消息可能会以不同的方式处理,而不是通过MatLab的消息循环(如果可能的话),这真是太愚蠢了。看,在某些情况下,使用
strcpy
和friends操作由字符数组定义的字符串,永远不要忘记尾随的
\0
,等等,是更好的方法。但一般来说,你会建议人们使用
std::string
,只在需要时使用低级的东西,对吗?在幕后,两者都会做完全相同的事情,但在野外,一个比另一个更不容易出错。这就是为什么它是指导方针,不是法律,是建议,不是义务。