找回密码
 注册
Simdroid-非首页
查看: 78|回复: 2

【求助】MFC用分线程无法调用MATLAB_VC绘图类的实例

[复制链接]
发表于 2011-3-18 14:03:51 | 显示全部楼层 |阅读模式 来自 广西北海
本帖最后由 lastyaer 于 2011-3-18 14:05 编辑

求助,谢谢各位! 如下问题:
shunfly的帖子“写了个MATLAB VC绘图类”,(http://forum.simwe.com/viewthread.php?tid=779324&extra=&highlight=%D0%B4%C1%CB%B8%F6MATLAB%2BVC%BB%E6%CD%BC%C0%E0&page=2)拜读以后激动万分,在这个基础上写了一个MATLAB VC绘图类CMATLABDLG,原理完全相同,只是把matlab fig嵌在dialog中,作为该类的显示资源。

主程序是MFC 单文档模式,定义了一个成员变量:
CMATLABDLG  m_matdlg;
将m_matdlg嵌在view视图中,然后调用绘图函数
int func1()
{ .....
Vplot(x, y, mwArray("Parent"), m_matdlg.m_hAxis);
...}
m_hAxis为axes句柄。运行正常。

但是如果用分线程调用func1(),报错
开启分线程:
CWinThread *pThread=AfxBeginThread(Thread1,this);

UINT CMatlabView::Thread1(LPVOID lpParameter)
{
CMatlabView *pView=(CMatlabView *)lpParameter;
pView->func1();
return 1;
}

分线程的调用方式没问题,只要不涉及m_matdlg的函数都运行正常。
错误提示:
Runtime Error!
Program: E:/..../MatLab.exe
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

后来看网上有些资料说分线程调用函数和对象时,要使用静态或全局对象,把m_matdlg改成全局对象后依然报错,错误提示相同。

不知道怎么办了,求助给位,第一次发帖求助,不知道问题说清楚没有.......

我的本意是做一个MFC界面,嵌入几个MATLAB视图,功能是接收即时数据处理并作图显示,开启几个分线程处理即时数据并作图显示,因为计算比较费时间,单线程无法即时完成,所以使用多线程。处理数据没问题,只是最后要作图时必须调用绘图类对象。求助!!  谢谢各位了......
 楼主| 发表于 2011-3-22 13:09:49 | 显示全部楼层 来自 广西北海
Simdroid开发平台
1# lastyaer

没找到太准确的原因,貌似解决了。
分线程调用Vplot(......)的时候,matlab subfigure窗口即时收到WM_PAINT 消息,但是回调函数响应这个消息就报错。解决办法是
分线程调用
g_CMutex.lock();
m_MatDlg.showwindow(SW_HIDE);
Vplot(......);
m_MatDlg.showwindow(SW_SHOW);
m_MatDlg.updatewindow();  //matlab subfigure窗口在该行完成后收到消息
g_CMutex.unlock();

实验结果,20个分线程同时开启并在三个figure窗口上画图,目前没有报错。
回复 不支持

使用道具 举报

发表于 2011-5-27 09:42:36 | 显示全部楼层 来自 陕西西安
确实,我在使用线程实时绘图的过程中,也会出现Runtime Error错误!目前使用使用定时器来完成动态绘图的工作。可以研究一下多线程动态绘制出现错误的原因!
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-6 09:26 , Processed in 0.032131 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表