MatCom_C++(MultiThread)解决线程的冲突问题
2012-10-05 21:19
295 查看
MatCom_C++(MultiThread)解决线程的冲突问题
一.配置matlib.h 和 v4501v.lib文件
二.编程:
1.在XXApp类中,添加头文件#include<matlib.h>
在XXDlg类中,添加头文件#include<matlib.h>
2. 在XXApp类的初始化实例函数中:
BOOLCMatlab_MultithreadApp::InitInstance()
{
//在创建对话框之前,初始化MATCOM
initM(MATCOM_VERSION);
CMatlab_MultithreadDlgdlg;
}
3.在整个程序结束之前,需要调用exitM():对XXApp类,添加ExitInstance()虚函数。
int CMatlab_MultithreadApp::ExitInstance()
{
exitM();
return CWinApp::ExitInstance();
}
4.在XXDlg类中,
a.添加画图按钮的相应函数
void CMatlab_MultithreadDlg::OnBnClickedButtonDrawpicture()
{
Mm t,y;
t = linspace(0.0,1.0,400);
y = sin(2.0*pi*4*t);//建立一个4赫兹的正弦曲线
winaxes(m_hWnd);//在指定的窗口中建立坐标轴
axesposition(130,20,300,200);//确定窗口位置和图形大小
plot((CL(t),y));
}
b.添加刷新按钮的相应函数
添加全局变量:BOOL bExit = FALSE;为了点击停止的时候让它停止
void CMatlab_MultithreadDlg::OnBnClickedButtonRefresh()
{
int nValue = 0;
CString str;
bExit = FALSE;
while (!bExit)
{
nValue++;
str.Format("%d",nValue);
GetDlgItem(IDC_EDIT)->SetWindowText(str);
Sleep(50);//每隔50毫秒,循环一次。
}
c.停止按钮的响应函数。
void CMatlab_MultithreadDlg::OnBnClickedButtonStop()
{
bExit = TRUE;
}
d.但是这个程序运行时会出现无响应等问题。所以,要把刷新的代码放在一个线程里完成。
void CMatlab_MultithreadDlg::OnBnClickedButtonRefresh()
{
bExit = FALSE;
//新建一个线程,第一个参数为要调用的函数名称,第二个参数为,需要传递的参数,我们把这个窗口的指针传进去。
AfxBeginThread(ThreadProc,(LPVOID)this);
}
编写ThreadProc函数。可以查看AfxBeginThread的帮助,看看它第一个参数的写法。
UINT ThreadProc(LPVOID pParam)
{
int nValue = 0;
CString str;
//创建一个指针来接受输入的参数。
CMatlab_MultithreadDlg *pDlg = (CMatlab_MultithreadDlg*)pParam;
while (!bExit)
{
nValue++;
str.Format("%d",nValue);
//GetDlgItem(IDC_EDIT)->SetWindowText(str);//不能直接调用。
pDlg-> GetDlgItem(IDC_EDIT)->SetWindowText(str);
Sleep(50);//每隔50毫秒,循环一次。
}
return 0;
}
5.在有的机器上会出现窗口关闭了,在任务栏仍然有这这个程序。(我的机器上没出项这种情况)所以把第三步改为
int CMatlab_MultithreadApp::ExitInstance()
{
exitM();
Sleep(500);
return CWinApp::ExitInstance();
}
一.配置matlib.h 和 v4501v.lib文件
二.编程:
1.在XXApp类中,添加头文件#include<matlib.h>
在XXDlg类中,添加头文件#include<matlib.h>
2. 在XXApp类的初始化实例函数中:
BOOLCMatlab_MultithreadApp::InitInstance()
{
//在创建对话框之前,初始化MATCOM
initM(MATCOM_VERSION);
CMatlab_MultithreadDlgdlg;
}
3.在整个程序结束之前,需要调用exitM():对XXApp类,添加ExitInstance()虚函数。
int CMatlab_MultithreadApp::ExitInstance()
{
exitM();
return CWinApp::ExitInstance();
}
4.在XXDlg类中,
a.添加画图按钮的相应函数
void CMatlab_MultithreadDlg::OnBnClickedButtonDrawpicture()
{
Mm t,y;
t = linspace(0.0,1.0,400);
y = sin(2.0*pi*4*t);//建立一个4赫兹的正弦曲线
winaxes(m_hWnd);//在指定的窗口中建立坐标轴
axesposition(130,20,300,200);//确定窗口位置和图形大小
plot((CL(t),y));
}
b.添加刷新按钮的相应函数
添加全局变量:BOOL bExit = FALSE;为了点击停止的时候让它停止
void CMatlab_MultithreadDlg::OnBnClickedButtonRefresh()
{
int nValue = 0;
CString str;
bExit = FALSE;
while (!bExit)
{
nValue++;
str.Format("%d",nValue);
GetDlgItem(IDC_EDIT)->SetWindowText(str);
Sleep(50);//每隔50毫秒,循环一次。
}
c.停止按钮的响应函数。
void CMatlab_MultithreadDlg::OnBnClickedButtonStop()
{
bExit = TRUE;
}
d.但是这个程序运行时会出现无响应等问题。所以,要把刷新的代码放在一个线程里完成。
void CMatlab_MultithreadDlg::OnBnClickedButtonRefresh()
{
bExit = FALSE;
//新建一个线程,第一个参数为要调用的函数名称,第二个参数为,需要传递的参数,我们把这个窗口的指针传进去。
AfxBeginThread(ThreadProc,(LPVOID)this);
}
编写ThreadProc函数。可以查看AfxBeginThread的帮助,看看它第一个参数的写法。
UINT ThreadProc(LPVOID pParam)
{
int nValue = 0;
CString str;
//创建一个指针来接受输入的参数。
CMatlab_MultithreadDlg *pDlg = (CMatlab_MultithreadDlg*)pParam;
while (!bExit)
{
nValue++;
str.Format("%d",nValue);
//GetDlgItem(IDC_EDIT)->SetWindowText(str);//不能直接调用。
pDlg-> GetDlgItem(IDC_EDIT)->SetWindowText(str);
Sleep(50);//每隔50毫秒,循环一次。
}
return 0;
}
5.在有的机器上会出现窗口关闭了,在任务栏仍然有这这个程序。(我的机器上没出项这种情况)所以把第三步改为
int CMatlab_MultithreadApp::ExitInstance()
{
exitM();
Sleep(500);
return CWinApp::ExitInstance();
}
相关文章推荐
- C++线程 -- boost::barrier解决多线程分工问题
- C/C++ 错误笔记-解决swap函数与标准库的std::swap函数冲突的问题
- 【转载】:【C++跨平台系列】解决STL的max()与numeric_limits::max()和VC6 min/max 宏冲突问题
- 解决swt项目中由于线程冲突问题时间无响应问题
- 待解决的问题 线程冲突!
- C++高手进啊 帮我解决个小问题哦~THANK YOU
- 解决ADS1.2与MDK4.7冲突问题
- 【Android界面实现】解决ScrollView中嵌套Listview,Listview中嵌套Listview显示不完整和滑动冲突的问题
- Hadoop启动namenode失败,端口号冲突问题解决
- C++前向声明(解决类的互相包含问题)
- 解决多个window.onload冲突问题
- android开发步步为营之65:解决ScrollView和ListView触摸事件onInterceptTouchEvent相互冲突问题
- 解决ext与ueditor同时使用,引入js文件冲突问题
- 文档冲突iOS网络编程-解决iCloud文档存储过程中文档冲突问题
- 关于多人共用一宽带账号上网网卡地址冲突问题解决方法
- unp2 14 使用线程和互斥锁解决消费者生产者问题
- 解决C++连接MySQL数据库插入和获取记录中文字符乱码问题
- C++解决一般大数统计问题
- 名字空间解决数据库冲突问题
- 怎么解决maven管理jar包冲突问题