滴水三期 win32 事件 CreatEvent函数 SetEvent函数

事件也是一个内核对象。

CreatEvent函数

HANDLE  CreatEvent(

        LPSECURITY_ATTRIBUTES lpEventAttributes,  //安全属性,一般为NULL,默认。

        BOOL    bManualReset,  //若为FALSE,只要有人wait到,立马自动改为未通知状态。                                                   若 为TRUE,可以通过调用ResetEvent将事件对象标记为未通知。

                                                (手动重置的意思)

        BOOL    bInitialState,    //创建出来的时候的初始状态,TRUE为已通知,FALSE为未通知

        LPCTSTR  lpName ,    //名字。)

创建事件:

//默认安全属性,手动设置未通知状态(TRUE),初始状态未通知(FALSE),名字为xyz

HANDLE  g_event =CreatEvent(NULL,TRUE,FALSE,"XYZ");

将对象设置为已通知 :

  BOOL  setEvent(HANDLE hEvent);

关闭句柄:

ClosedHandle();//只是让内核对象计数器-1,并不是关闭内核对象。

VC6课堂代码:

// Read_letter.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "resource.h"
#include <windows.h>
HWND Hwnd_ExeHwnd;
HWND hEdit1;	
HWND hEdit2;
HWND hEdit3;
HWND hEdit4;

HANDLE g_event;
HANDLE hThread_edit[3];
TCHAR szbuffer[10];

DWORD  WINAPI next_pro1(LPVOID lpParameter)
{
	WaitForSingleObject(g_event,-1);
	GetWindowText(hEdit1,szbuffer,10);
	SetWindowText(hEdit2,szbuffer);
	Sleep(1000);
	SetEvent(g_event);
	return 0;
}
DWORD  WINAPI next_pro2(LPVOID lpParameter)
{
	WaitForSingleObject(g_event,-1);
	GetWindowText(hEdit1,szbuffer,10);
	SetWindowText(hEdit3,szbuffer);
	Sleep(1000);
	SetEvent(g_event);
	return 0;
}
DWORD  WINAPI next_pro3(LPVOID lpParameter)
{
	WaitForSingleObject(g_event,-1);
	GetWindowText(hEdit1,szbuffer,10);
	SetWindowText(hEdit4,szbuffer);
	Sleep(1000);
	SetEvent(g_event);
	return 0;
}

DWORD  WINAPI Begin_pro(LPVOID lpParameter)
{
	g_event=CreateEvent(NULL,FALSE,FALSE,"");
	 hThread_edit[0]=CreateThread(NULL,0,next_pro1,NULL,0,NULL);
	 hThread_edit[1]=CreateThread(NULL,0,next_pro2,NULL,0,NULL);
	 hThread_edit[2]=CreateThread(NULL,0,next_pro3,NULL,0,NULL);

	SetWindowText(hEdit1,"1000");
	Sleep(1000);
	SetEvent(g_event);

WaitForMultipleObjects(3,hThread_edit,TRUE,-1);
CloseHandle( hThread_edit[0]);
CloseHandle( hThread_edit[1]);
CloseHandle( hThread_edit[2]);
CloseHandle(g_event);

	return 0;
}


BOOL CALLBACK MAIN_PROC(									
						HWND hwndDlg,  // handle to dialog box			
						UINT uMsg,     // message			
						WPARAM wParam, // first message parameter			
						LPARAM lParam  // second message parameter			
						)	
{
	
	Hwnd_ExeHwnd=hwndDlg;
	switch(uMsg)								
	{
	case	WM_CLOSE:
		EndDialog(hwndDlg,0);
		break; 
	case  WM_INITDIALOG :	
		hEdit1=GetDlgItem(Hwnd_ExeHwnd,IDC_EDIT1);
		hEdit2=GetDlgItem(Hwnd_ExeHwnd,IDC_EDIT2);
		hEdit3=GetDlgItem(Hwnd_ExeHwnd,IDC_EDIT3);
		hEdit4=GetDlgItem(Hwnd_ExeHwnd,IDC_EDIT4);
		SetWindowText(hEdit1,"0");
		SetWindowText(hEdit2,"0");
		SetWindowText(hEdit3,"0");
		SetWindowText(hEdit4,"0");
		break; 		
	case  WM_COMMAND :	
		switch(LOWORD(wParam))
		{
		case IDC_BUTTON_START:	
			HANDLE hThread_Main=CreateThread(NULL,0,Begin_pro,NULL,0,NULL);
			break; 	
		}
		break; 	
	}
	return FALSE ;	
}

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{

	DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG_MAIN),NULL,MAIN_PROC);
	return 0;
}



效果:

下面三个编辑框挨个读取上面编辑框的内容。 不足的是,它不可以控制先后顺序。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值