• 网络学院
  • IT资讯
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
多线程技术在VC中的应用
  站点:
  • 首 页
  • 最新软件
  • 文章教程
  • 国内软件
  • 国外软件
  • 绿色软件
  • 源码下载
  • 字体下载
多线程技术在VC中的应用
软件发布 多线程技术在VC中的应用
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件 绿软下载
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回文章教程首页 >> 文章首页 >> 编程技术 >> VC教程 >> 多线程技术在VC中的应用

多线程技术在VC中的应用

添加时间: 2006-2-12 2:42:47  作者: VC教程  阅读次数:1022   来源: http://d9soft.com

       

  此实用程序的主要功能是实现定时关机,同时也提供了辅助功能:随时关机、重新启动、注销以及动态时钟。如果设置的时间不对,可以随时更改。这些功能的具体实现采用了多线程技术。  

  功能的实现 

  1.线程的定义

  本例中单独设置了一个线程监视当前时间,在Visual C++中线程的简单调用语句为:AfxBegin -Thread(ProcName, param, Priority),第一个参数是线程函数名,param是准备传送给线程的任意32位值,最后一个是线程的优先级(可用常量表示)。这里先定义一个线程函数:  

  UINT timeThreadProc(LPVOID pParam) //定义线程,必须照此格式
  {
  CTime gt; //定义时间变量
  int hh,mm,ss; //为存储时间定义整型变量
  do //判断时间的循环
  {
  gt=CTime::GetCurrentTime();
  //提取当前时间
  hh=gt.GetHour(); //分别提取时、分、秒 mm=gt.GetMinute();
  ss=gt.GetSecond();
  } while ((h!=hh)  (m!=mm)  (s!=ss));
  //判断当前时间
  flag=0; //置状态标志
  ExitWindowsEx(EWX_SHUTDOWN,0);
  //关闭计算机
  return 0;
  }

  在上面这个函数中,第一行的格式不能改变,其中的h、m、s是三个全局变量,存储的是设定的时间(时、分、秒)值。通过循环判断,如果当前时间满足设定的条件,则调用MFC的 线程的调用方式为: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与线程通信,达到定时关机的目的。
函数ExitWindowsEx(UNIT uFlags, DWORD dwReserved)来关闭计算机。

   为了方便定时,在此程序中加入了一个时钟。原理主要是通过一个定时器(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使用ActiveX控件常见问题 下一篇文章: VC中如何改变对框中控件的颜色

相关文章:

  • 教你如何用零框架技术加密网页
  • 用端口碰撞技术实现服务器远程管理
  • 城域网光缆线路设计与技术应用
  • Oracle集成技术及创建工具
  • 怎样应对ORACLE面试中的问题技术

相关软件:

  • CGI技术全面接触(PDG)
  • 技术人员实用工具合集 06/03/21 [机必备工具]
  • 全国专业技术人员计算机应用能力考试模拟 2.1
  • 珊瑚工作室全国计算机等级考试三级网络技术 考试系统 V5.1
  • 计算机等级考试训练模拟软件(三级网络技术) V1.04
  • 电脑应用一软通 V1.06

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

编程技术分类导航

  • ASP & ASP.NET教程
  • PHP教程
  • JSP教程
  • C/C++教程
  • VB & VB.NET教程
  • VC教程
  • Delphi教程
  • BCB教程
  • VFP教程
  • PB教程
  • JAVA教程
  • XML教程
  • C#教程
  • CGI教程

本类经典文章推荐

  • VC++之Button控件
  • VC++之Static Box控件
  • VC++之Edit Box控件
  • VC++之Static Box控件
  • VC++之Edit Box控件
  • VC++之Scroll Bar
  • VC++之Scroll Bar
  • VC++之List Box/Check List Box控...
  • VC++ Combo Box/Combo Box Ex控件
  • VC++ List Ctrl控件

VC教程阅读排行

  • VC++之List Box/Check List Box控...
  • VC++ List Ctrl控件
  • VC++ Combo Box/Combo Box Ex控件
  • VC++之Button控件
  • VC++之Tab Ctrl控件
  • VC++之Edit Box控件
  • VC++之Edit Box控件
  • VC遍历整个目录树查找文件
  • VC++之Scroll Bar
  • 深入编程:控制面板知多少?

编程技术阅读总排行

  • VB入门教程之一
  • Java连接数据库实例
  • 第二章 PowerBuilder 入门之创建新...
  • VC++之List Box/Check List Box控...
  • 第一章 什么是PowerBuilder
  • VC++ List Ctrl控件
  • VC++ Combo Box/Combo Box Ex控件
  • 学C++不得不看的一篇文章
  • VB入门教程之二
  • VC++之Button控件

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有