创建响应应用程序在后台运行计算
这一主题展示了如何让一个应用程序使用背景池反应更迅速。通常,MATLAB®中止执行的运行时计算。而MATLAB是暂停,你不能打断应用程序。让你的应用程序的响应,使用背景池运行在后台计算。MATLAB计算在后台运行时,应用程序可以立即回复用户界面交互。
如果你想修改一个现有的应用程序在后台运行的代码,看看响应应用程序计算和情节简单的曲线。
在这个话题,你:
打开一个现有应用程序在后台不运行任何代码。
修改一个函数允许应用程序在后台运行代码。
写一个函数代码完成后自动更新一个阴谋在后台运行。
修改现有的回调函数允许应用程序立即回复用户界面交互和中断计算。
打开应用程序设计应用
在这个例子中使用的应用程序允许您选择一个函数,然后计算和绘制y
设在根据内置的数据x
设在数据。
运行这个命令打开的工作副本PlotCurve
应用程序。
openExample (“matlab / PlotCurveAppExample”)
使用这个应用程序作为一个起点你修改和重组程序代码。应用程序有五个功能:
getFunction
——使用价值从下拉fcnDropDown
选择一个函数fcn
。自定义函数可以作为支持文件使用万博1manbetx暂停(rand)
模拟一个非凡的计算。createData
——使用getFunction
得到一个函数fcn
,然后使用该函数来计算y = fcn (x)
在迭代为
循环。的为
循环中止MATLAB执行,直到完成为止。updatePlot
——更新为代表的阴谋app.UIAxes
与每个y
设在计算后的数据点。clearPlot
——明确的情节。toggleButtons
——使之间切换开始按钮或停止按钮。
通过选择编辑代码代码视图在应用程序设计器窗口。
添加一个未来
数组的属性
当你在后台运行一个函数时,您创建一个未来
对象。你可以获取的输出未来
对象使用fetchOutputs
。
让你的应用程序响应,需要存储所有的未来
这个应用程序创建对象。然后,您可以使用取消
停止时的计算在后台运行程序的用户点击停止按钮或使用下拉fcnDropDown
。
存储未来
应用程序创建对象,您必须添加一个私有财产中的应用。应用程序设计师将来发布,点击财产>私有财产,然后名称属性F
。
属性(访问=私人)h%线对象X%轴数据F%期货计算结束
创建y
设在在后台数据
的createData
函数创建y
设在当用户点击应用程序的数据开始按钮。编辑函数来计算y
设在在后台数据。
使用
parfeval
(并行计算工具箱)和backgroundPool
运行函数fcn
在后台。在每个迭代中为
循环,存储每个未来
数组中f
。存储阵列的未来
F
应用程序的属性。使用
afterEach
运行一个函数onFutureDone
的每个元素后,更新一个阴谋app.F
完成。指定PassFuture
作为真正的
运行函数使用未来
元素。使用
毕竟
之间的切换开始和停止按钮后,MATLAB完成计算的所有y
设在数据。
函数createData(应用)%创建数据的x轴和y轴。%更新一个阴谋而被创造出来的数据。%得到函数fcn = app.getFunction;%轴数据app.X = 5 * 1:10 0;%轴数据为i = 1:元素个数(app.X)在后台运行fcn % (x)f (i) = parfeval (backgroundPool fcn 1, app.X(我));结束%未来存储阵列app.F = f;%每个未来完成后更新情节afterEach (app.F @app.onFutureDone, 0, PassFuture = true);%完成切换按钮毕竟未来的对象毕竟(app.F @ app.toggleButtons (~), 0);结束
自动更新的阴谋后在后台数据计算
创建一个新的函数后自动更新情节未来
完成。
在应用程序设计师将来发布,点击函数>私有函数,那么函数的名字
onFutureDone
。如果
未来
对象完成了一个错误,立即从函数返回。如果
未来
对象与一个错误,没有完成使用ID
的属性f
找到元素的索引f
数组中app.F
。的索引未来
对象f
必须匹配的索引x
设在数据点。更新阴谋的结果
f
和匹配x
设在点的数据,使用索引idx
。
函数onFutureDone (app, f)%不更新情节如果有一个错误如果~ isempty (f.Error)返回结束%找到未来的指数(app.F idx = (。ID] = = f.ID);%更新阴谋使用结果app.updatePlot (fetchOutputs (f)、idx);结束
让您的应用程序响应更及时取消未来
数组
让您的应用程序响应更及时、编辑取消回调未来
数组app.F
后:
使用下拉更改的值
fcnDropDown
。函数fcnDropDownValueChanged(应用程序、事件)%停止期货如果~ isempty (app.F)取消(app.F)结束app.clearPlot如果app.StartButton。启用= = false app.createData结束结束
推动停止按钮。
函数StopButtonPushed(应用程序、事件)%停止期货如果~ isempty (app.F)取消(app.F)结束app.toggleButtons结束
请求应用程序关闭。
函数UIFigureCloseRequest(应用程序、事件)%停止期货如果~ isempty (app.F)取消(app.F)结束删除(应用)结束
响应应用程序计算和情节简单的曲线
这个例子显示了一个应用程序计算和情节简单的曲线。你可以选择一个函数图,然后这个函数。应用程序使用为
循环计算y
设在在后台数据。MATLAB不暂停执行而计算数据,因此你能够阻止应用程序或更新的绘图类型数据时计算。
运行PlotCurveBackground
应用程序通过单击运行按钮在程序设计师。
另请参阅
parfeval
|backgroundPool
|appdesigner