CreateEvent创建事件对象

**usb.cpp**
m_hReadEvent=CreateEvent(NULL,TRUE,TRUE,NULL);//初始为无信号状态
m_hWriteEvent=CreateEvent(NULL,TRUE,TRUE,NULL);

HANDLE CreateEventA(
LPSECURITY_ATTRIBUTES lpEventAttributes,
BOOL bManualReset,
BOOL bInitialState,
LPCSTR lpName
);
**LPSECURITY_ATTRIBUTES 😗*指向SECURITY_ATTRIBUTES结构的指针。如果此参数为NULL,则子进程不能继承该句柄。事件获取默认的安全描述符
**bManualReset:**如果此参数为TRUE,则该函数创建一个手动重置事件对象,该对象需要使用 ResetEvent函数将事件状态设置为非信号状态。
bInitialState:如果此参数为TRUE,则表示事件对象的初始状态;
lpName:如果lpName为NULL,则创建事件对象时不使用名称。

**主函数:**
OVERLAPPED overlapped;//OVERLAPPED是一个结构体
//在函数调用中使用该结构之前,应始终将该结构的任何未使用成员初始化为零。否则,函数可能会失败并返回
 
 memset(&overlapped, 0, sizeof(OVERLAPPED));
 SetEvent(usb.m_hWriteEvent);
overlapped.hEvent = usb.m_hWriteEvent ;
::WriteFile(usb.m_hWriteHandle, SendData, nTotalsize,&dwNumberofBytesWritten,&overlapped)

hEvent:操作完成后,系统会将其设置为已通知状态的事件的句柄。在将此结构传递给任何重叠的函数之前,用户必须使用CreateEvent函数将该成员初始化为零或有效的事件句柄。然后可以使用此事件来同步设备的同时I / O请求。有关更多信息,请参见备注。
在开始I / O操作之前,诸如ReadFile和WriteFile之类的功能会将此句柄设置为非信号状态。操作完成后,手柄将设置为发出信号的状态。

诸如GetOverlappedResult和同步等待功能之类的功能会将自动重置事件重置为非信号状态。因此,您应该使用手动重置事件。如果使用自动重置事件,则如果您等待操作完成,然后将bWait参数设置为TRUE,则调用GetOverlappedResult,则应用程序可以停止响应。

typedef struct _OVERLAPPED {
ULONG_PTR Internal;
ULONG_PTR InternalHigh;
union {
struct {
DWORD Offset;
DWORD OffsetHigh;
} DUMMYSTRUCTNAME;
PVOID Pointer;
} DUMMYUNIONNAME;
HANDLE hEvent;
} OVERLAPPED, *LPOVERLAPPED;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

物联网小镇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值