最小的例子,你同时运行两个循环,以编程方式停止/开关循环或while循环或更新的信息在这些循环,而他们正在执行。

3视图(30天)
我有一个问题与并行计算、如何同时运行两个循环,如何以编程方式停止一个for循环或更新的信息在一个while循环。
我正在写一个程序,执行动物跟踪(一只老鼠/鼠标)在一个开放的领域,并发送脉冲(电压)数据采集设备基于鼠的当前位置。这是给 光遗传学 实验。
图像采集和跟踪代码就完成了。
脉冲生成代码。
我的问题是我不能同时做两个。
采集是一个基本的设备,需要一个电压值在0.0 - 5.0之间范围。生成一个脉冲需要构建一个电压值的数组和循环。一个简单的例子…
v = 0。1: 5
DAQsend (v)
结束
跟踪老鼠在一个开放的领域需要从摄像头获取图像,定位,并确定是否它的立场是在一些ROI。这也需要一个循环…
t = 1:1000
我= getCamImage ()
投资回报率= determineROI (im)
结束
正如你所看到的跟踪和采集脉冲生成都需要循环,即采集循环嵌套在跟踪循环……
t = 1:1000
我= getCamImage ()
投资回报率= determineROI (im)
如果投资回报率= = 1
v = 1;
t < 1000
DAQsend (voltageArray (v))
v = v + 1;
结束
其他的
DAQsend (0)
结束
结束
不幸的是,这段代码不允许我继续产生脉冲,同时更新跟踪信息。我想知道这样的可能……
t = 1:1000
我=兰德;
如果我>。
v = 1;
t < 1000
disp (v)
v = v + 1;
暂停(1。)
结束
结束
结束
这是一个更完整 可运行的例子
到目前为止,我已经能够使用批处理函数并行计算工具箱中同时运行两个循环。
daqjob =批(“DAQsend”1 {daqObject voltageArray});
这个允许我执行动物跟踪并生成一个脉冲序列在一个平行的工人。然而,我不能更新或停止这种脉冲序列。
我将感激和敬畏任何人都可以提供一个最小的例子,你同时运行两个循环,并通过编程的方式停止/开关循环或while循环或更新的信息在这些循环,当他们正在执行。

接受的答案

布莱德
布莱德 2016年10月5日
现在问题已经解决了使用一个计时器方法。如果你有兴趣,我把笔记的 这里的评论部分 关于它是如何工作的。

答案(1)

乔叶
乔叶 2016年10月5日
t = 1:1000
我= getCamImage ()
投资回报率= determineROI (im)
如果投资回报率= = 1
v = 1;
t < 1000
DAQsend (voltageArray (v))
v = v + 1;
结束
其他的
DAQsend (0)
结束
结束
上面的代码不工作,你想要它,因为程序不能脱离while循环。当程序进入while循环,循环条件(t < 1000)总是满意因为它从来没有更新。纠正循环条件应该解决这个问题。
t = 1:1000
我= getCamImage ()
投资回报率= determineROI (im)
如果投资回报率= = 1
v = 1;
v < 1000%发送999次脉冲
DAQsend (voltageArray (v))
v = v + 1;
结束
其他的
DAQsend (0)
结束
结束
2的评论
恋人Sampathkumar
恋人Sampathkumar 2019年2月26日
嗨,皮特,
我需要一个类似的解决方案。你找到解决这个问题,如果是请分享你的想法好。
谢谢你!

登录置评。