- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VC多线程在生物电波数据采集中设计及实现
VC多线程在生物电波数据采集中设计及实现
[摘要]对一个生物电波应用程序中的数据采集方法进行了研究,阐述多线程的原理及实际应用方法,运用VC++实现了数据采集。生物电波应用程序是针对医院的一些生物电波采集仪器,结合现代医学生理学原理与临床应用的实际需要设计的。医生在生物电波采集设备的帮助下,通过计算机上简单的操作界面,对患者的身体某部位的生物电波进行采样,然后对所得到的数据进行分析和测量。
[关键词]数据采集 VC++ 生物电波
中图分类号:Q64文献标识码:A文章编号:1671-7597(2009)0220056-02
一、多线程基础
在Win32 API的基础之上,MFC提供了处理线程的类和函数。MFC对多线程进行一种简单的封装,其中每个线程都是从CWinThread类继承而来的。每一个应用程序的执行都有一个主线程,主线程也是从CWinThread类继承而来的。可以利用CWinThread对象创建应用程序执行的其他线程。处理线程的类是CWinThread,它的成员变量m_hThread和m_hThreadID是对应的Win32线程句柄和线程ID。MFC多线程编程中经常用到的几个全局函数函数是AfxBeginThread、AfxEndThread等。
MFC明确区分两种线程:用户界面线程(User interface thread)和工作者线程(Worker thread)。用户界面线程一般用于处理用户输入并对用户产生的事件和消息作出应答。工作者线程用于完成不要求用户输入的任务,如耗时计算。
线程函数的格式如下:
UNIT函数名(LPVOID pParam)
工作者线程的AfxBeginThread的原型如下:
CWinThread* AFXAPI AfxBeginThread(
AFX_THREADPROC pfnThreadProc,
LPVOID pParam,
int nPriority,
UINT nStackSize,
DWORD dwCreateFlags,
LPSECURITY_ATTRIBUTES lpSecurityAttrs
)
其中参数1指定控制函数的地址;参数2指定传递给控制函数的参数;参数3、4、5分别指定线程的优先级、堆栈大小、创建标识、安全属性,含义同用户界面线程。
二、实现线程函数
在CDlgget.cpp文件中加入创建线程函数的代码:
//以下为用于同时产生采样曲线的线程函数
UINT Pen1(LPVOID param)
{
p-Online(1); //调用画线函数在特定位置画线,参数将决定画像的起始位置
return 0; //返回值为无符号整数
}
…
UINT Pen10(LPVOID param)
{
p-Online(10);
return 0;
}
修改Online(int i)函数代码如下:
void CDlgget::Online( int i )
{
int k=m*i;
int x=0,y=0;
CClientDC dc(this);
CPen MyNewPen,MyNewPen1;
CPen* pOriginalPen=dc.GetCurrentPen();
MyNewPen.CreatePen(PS_SOLID,1,RGB(255,0,0));
MyNewPen1.CreatePen(PS_SOLID,1,RGB(220,220,220));
dc.SelectObject(MyNewPen);
dc.MoveTo(24,k);
unsignedint q=i*1000;
::srand(q);
for(x=24;x1024;x=x+2)
{
if(!stop) //判断是否需要停止画线
{
if(n5000) //画到屏幕最右端时共产生5000个点
{
//在显示新画的线时需要搽除以前的线
dc.SelectObject(MyNewPen1)
//覆盖以前的线即可
dc.Rectangle(x,m,x+2,11*m);
dc.SelectObject(MyNewPen);
}
::Sleep(10);
y=k+rand()%20;
dc.LineTo(x,y);
n++;
if(x==1022)
您可能关注的文档
最近下载
- 投标服务承诺书(20篇).docx VIP
- 七年级英语第一次月考卷(考试版A4)【测试范围:沪教版五四学制2024 Starter~Unit 1】(上海专用).docx VIP
- 李白按年龄顺序写的诗.docx VIP
- 2025年四川省高考化学试卷真题(含答案解析).docx
- 高频精选:京东快递员ai面试题及答案.doc VIP
- 高频精选:京东快递员ai面试题及答案大全.doc VIP
- 吉林省中药软片炮制规范.pptx VIP
- 名著阅读《湘行散记》七年级语文上册部编版(共9页).docx VIP
- 《白洋淀纪事》阅读测试题含答案(推荐).docx VIP
- 必考名著《白洋淀纪事》导读+知识点汇总.pdf VIP
文档评论(0)