盾怪网教程:是一个免费提供流行杀毒软件教程、在线学习分享的学习平台!

多线程技术在VC中的应用

时间:2025/3/15作者:未知来源:盾怪网教程人气:

[摘要](s!=ss)); //判断当前时间 flag=0; //置状态标志 ExitWindowsEx(EWX_SHUTDOWN,0); //关闭计算机 return 0; 在上面这个函数中,第一行的格...
(s!=ss));

//判断当前时间

flag=0; //置状态标志

ExitWindowsEx(EWX_SHUTDOWN,0);

//关闭计算机

return 0;

}

在上面这个函数中,第一行的格式不能改变,其中的h、m、s是三个全局变量,存储的是设定的时间(时、分、秒)值。通过循环判断,如果当前时间满足设定的条件,则调用MFC的函数ExitWindowsEx(UNIT uFlags, DWORD dwReserved)来关闭计算机。

2.线程的调用

线程的调用方式为:CWinThread * pThread=AfxBeginThread(ProcName,param,Priority),其中pThread是指向该线程的指针。源代码及说明如下:

void CShutDlg::Onqd()

//设置时间后的响应函数

{

UpdateData(TRUE); //从对话框取值

h=m_xsh; //把时、分、秒值传给全局变量

m=m_fzh;

s=m_miao;

if (flag==1) {pThread->ResumeThread();}

//通过状态标志判断,如果线程已经启动,则恢复运行

else {

pThread=AfxBeginThread(timeThreadProc,GetSafeHwnd(),THREAD_PRIORITY_NORMAL); //如果线程没运行,则启动线程

flag=1;} //把线程状态标志位置1

m_chsh.EnableWindow(1);

//重设按钮可用

m_qd.EnableWindow(0);

//设定按钮不可用

}

点击“重设”按钮的响应函数:

void CShutDlg::Onchsh()

{

if(flag==1) //判断标志位

{

pThread->SuspendThread();

//如果线程已经启动,则挂起

}

m_chsh.EnableWindow(0);

//重设按钮不可用

m_qd.EnableWindow(1); //设定按钮可用

}

在启动线程的时候,用*pThread保存线程的指针使得我们可以对线程进行挂起(SuspendThread函数)、恢复(ResumeThread函数)等操作,并通过全局变量h、m、s与线程通信,达到定时关机的目的。

3.动态时钟线程的实现

为了方便定时,在此程序中加入了一个时钟。原理主要是通过一个定时器(Timer),定时读取当前时间并按照格式显示,这里涉及到了VC中的另一个重要函数:OnTimer(UINT nIDEvent)。在程序启动初始化的时候,加入语句: m_nTimer=SetTimer(1,100,NULL),其中参数100是响应周期(ms)。通过向导加入时间响应函数,代码如下:

void CShutDlg::OnTimer(UINT nIDEvent) //定时器响应函数

{

CTime gg; //定义时间变量

CString s;

gg=CTime::GetCurrentTime();

//取出当前时间

s.Format(“%02d”,gg.GetSecond());

//定义输出格式

SetDlgItemText(IDC_miao1,s);

//在程序中显示时间

s.Format(“%02d”,gg.GetHour());

SetDlgItemText(IDC_xsh1,s);

s.Format(“%02d”,gg.GetMinute());

SetDlgItemText(IDC_fzh1,s);

CDialog::OnTimer(nIDEvent);

}

OnTimer(UINT nIDEvent)是系统函数,它参考初始化时设置的响应周期(100ms)来执行。需要注意的是,如果在程序中设置了Timer,那么在程序结束的时候要加上语句:KillTimer(0),以销毁定时器对象,否则白白浪费系统资源。

至此一个较为完整的定时器程序完成(其中重启、注销功能的实现很简单,也非本文的主题,故略过),如果再添加几个线程,即可扩展为一个多功能备忘录,有兴趣的读者可以加以改进。

小 结

本文中只是简单地运用了一个线程,控制方式也是简单地与全局变量通信的方法,在实际应用中还要注意线程同步、线程之间通信、线程与进程之间通信、利用全局变量通信、利用用户定义消息通信、利用事件通信等等许多重要问题。只有真正掌握了多线程高级编程技术才能写出实用、优秀的程序。

关键词:多线程技术在VC中的应用




Copyright © 2012-2018 盾怪网教程(http://www.dunguai.com) .All Rights Reserved 网站地图 友情链接

免责声明:本站资源均来自互联网收集 如有侵犯到您利益的地方请及时联系管理删除,敬请见谅!

QQ:1006262270   邮箱:kfyvi376850063@126.com   手机版