当前位置: 源码素材网 » VC++教程 » 详情页

C++ 基于CEvent的线程创建代码

  •   时间:2019-03-08
  • 概述:CEvent 线程

C++使用CEvent创建新线程的例子,包括了事件对象的代码:

#include <windows.h>	//包含头文件
#include <stdio.h>
DWORD WINAPI myfun1(//声明线程函数
  LPVOID lpParameter   
);
DWORD WINAPI myfun2(
  LPVOID lpParameter   
);
int a=0;
CEvent event;//定义全局变量a
main()
{	
	event=CEvent(false,false,NULL,NULL);
	printf("事件对象\r\n");
  HANDLE h1,h2;		//定义线程句柄
  event=::CreateEvent(NULL,FALSE,false,NULL);
  event.SetEvent();
	h1=::CreateThread(NULL,0,myfun1,NULL,0,NULL);//创建线程1
	
	printf("线程1开始运行!\r\n");
	h2=::CreateThread(NULL,0,myfun2,NULL,0,NULL);//创建线程2
	printf("线程2开始运行!\r\n");
	::CloseHandle(h1);//关闭线程句柄对象
	::CloseHandle(h2);
::Sleep(100000);	//程序睡眠10秒
return 0;
  }
DWORD WINAPI myfun1(LPVOID lpParameter) //线程函数1
{
   while(1)
   {
	   ::WaitForSingleObject(event.m_hObject,INFINITE);//请求事件对象
	  event.ResetEvent();//设置事件对象为无信号状态
	   if(a<100000)
{
	a+=1;//变量自加
	::Sleep(1000);//线程睡眠1秒
   printf("线程1:%d\r\n",a);//输出变量
    event.SetEvent();//设置事件对象为有信号状态
   }
else
{
  event.SetEvent();//设置事件对象为有信号状态
    break;//跳出循环
   }
}
    return 0;//线程
}
DWORD WINAPI myfun2(LPVOID lpParameter) //线程函数2
{
  while(1)
   {
	  ::WaitForSingleObject(event.m_hObject,INFINITE);//请求事件对象
    event.ResetEvent();//设置事件对象为无信号状态
	   if(a<100000)
{
	a+=1;
	::Sleep(1000);
   printf("线程2:%d\r\n",a);//输出变量
     event.SetEvent();
  }
else
{
    event.SetEvent();//设置事件对象为有信号状态
    break;//跳出循环
   }
}
    return 0;//线程正常退出
}

 事件对象.cpp文件代码:

#include <windows.h>	//包含头文件
#include <stdio.h>
DWORD WINAPI myfun1(//声明线程函数
  LPVOID lpParameter   
);
DWORD WINAPI myfun2(
  LPVOID lpParameter   
);
HANDLE hevent;//定义全局变量m_Sec
int a=0;	//定义全局变量a
main()
{	
  HANDLE h1,h2;//定义线程句柄
  hevent=::CreateEvent(NULL,FALSE,false,NULL);
  ::SetEvent(hevent);
	h1=::CreateThread(NULL,0,myfun1,NULL,0,NULL);//创建线程1
	printf("线程1开始运行!\r\n");
	h2=::CreateThread(NULL,0,myfun2,NULL,0,NULL);//创建线程2
	printf("线程2开始运行!\r\n");
	::CloseHandle(h1);//关闭线程句柄对象
	::CloseHandle(h2);
::Sleep(10000);//程序睡眠10秒
return 0;
  }
DWORD WINAPI myfun1(LPVOID lpParameter) //线程函数1
{
   while(1)
   {
	   ::WaitForSingleObject(hevent,INFINITE);
	  ::ResetEvent(hevent);
	   if(a<10000)
{
	a+=1;
	::Sleep(1000);
   printf("线程1:%d\r\n",a);//输出变量
     ::SetEvent(hevent);
   }
   else
{
    ::SetEvent(hevent);//设置事件对象为有信号状态
    break;//跳出循环
   }
   }
    return 0;
}
DWORD WINAPI myfun2(LPVOID lpParameter) //线程函数2
{
  while(1)
   {
	  ::WaitForSingleObject(hevent,INFINITE);
   ::ResetEvent(hevent);
	   if(a<10000)
{
	a+=1;
	::Sleep(1000);
   printf("线程2:%d\r\n",a);//输出变量
     ::SetEvent(hevent);
  }
	   else
{
    ::SetEvent(hevent);//设置事件对象为有信号状态
    break;//跳出循环
   }
  
  }
    return 0;
}

    相关内容:

    相关声明:

      若“C++ 基于CEvent的线程创建代码”有损您的权益,请告之我们删除内容。
      部分文章来源于网络,版权归原作者所有。