微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题创建简单的多线程程序
栏目软件世界
作者Tianyi
发布2001年25期
  众所周知,Windows系统是一个多进程,多任务的操作系统,它的应用程序至少有一个主线程,主线程在程序的生存期间(生存期:从程序的启动开始直至程序的关闭)一直运行着。而各线程间不会相互干扰,各做各的事情,各自完成各自的任务,这对于程序的功能速度及界面有着重要影响。举个例子:当你在编写打印程序的时候,总希望你的程序在打印的同时进行其它的操作,这时就需要用到线程函数来创建线程程序。在Visual C++中,使用MFC创建多线程程序是一件非常容易的事,只需要创建一个线程程序,然后调用AfxBegainThread()来创建一个新的线程来执行该函数,一切就大功告成。(

)
   具体步骤如下:
  1.  在Visual C++中新建一个工程,假设工程名为Thread,工程类型为MFC Applicationexe。在“AppWizard:step 1”中选择单文档,其余按默认设置。
  2.  使用资源编辑器在应用程序的IDR_MAINFRAME菜单中增加一个菜单Thread,其下增加一个菜单项,ID号为:ID_ThreadBegin,标题为thread begin。
  3.  使用Class Wizard 增加ID_ThreadBegin的消息处理函数,OnThreadBegin(),其中Class name框中应该选择CthreadView。编辑代码如下:
  void CThreadView::OnThreadBegin()
  {
  // TODO; Add your command handler code here
  HWND myWnd=GetSafeHwnd();
  AfxBeginThread(myThread,myWnd);//创建一个新的线程
  //myThread为线程控制函数的名称。  用来模拟秒表的指针。
  }
  4.  编辑线程控制函数(全局函数),将它放在OnThreadBegin()的前面,代码如下:
  UINT myThreadLPVOID param
  {
  int i=0;
  double r,arc;//表针长度及一次行走的角度
  r=50.0;
  arc=2*3.14/60;
  int x,y;//圆心坐标
  x=count*100+50;
  y=100;
  count++;//线程数
  CClientDC mydc(((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveView());
  //构造一个CDC对象
  for(;;)
  {
  mydc.SetROP2(R2_NOT);//设置模式
  mydc.MoveTo(x,y);
  mydc.LineTo(int(x+r*sin(i*arc)),int(y+r*cos(i*arc)));//划线
  i++;
  if(i==60)i=0;
  ::Sleep(20);延时
  }
  return 0;
  }
  注意:需要在ThreadView.cpp头部包含头文件“math.h”;并定义一个全局变量count;
  5.  编译执行,多次执行菜单Thread中的Thread begin命令,运行效果如图。