• WInCE下线程的事件同步


    程序开发中,我们经常会用到多线程。而某个线程的运行可能会依赖或影响另一线程的运行。如果一个线程需要通知其他线程某个事件发生了,可使用Event同步事件。


    先来看看与Event相关的函数:
    HANDLE CreateEvent(
      LPSECURITY_ATTRIBUTES lpEventAttributes,
      BOOL bManualReset,
      BOOL bInitialState,
      LPTSTR lpName
    );
    该函数创建一个同步对象。lpEventAttributes必须为NULL,bManualReset为是否需要人工重置对象状态(如果为TRUE,则WaitForSingleObject后需要调用ResetEvent,反之不需要),bInitialState是对象创建的初始状态(通知或未通知),lpName是事件的名字,可选。


    BOOL SetEvent(
      HANDLE hEvent
    );
    该函数把同步对象设置为通知状态。如果hEvent非法则返回FALSE。


    BOOL ResetEvent(
      HANDLE hEvent
    );
    该函数把同步对象设置为未通知状态。如果hEvent非法则返回FALSE。


    BOOL CloseHandle(
      HANDLE hObject
    );
    该函数关闭一个事件句柄。如果hObject非法则返回FALSE。


    再来看看相关的等待函数:
    DWORD WaitForSingleObject(
      HANDLE hHandle,
      DWORD dwMilliseconds
    );
    该函数等待单个同步对象,dwMilliseconds为毫秒数。返回WAIT_OBJECT_0则表示等待成功,返回WAIT_TIMEOUT表示等待超时。当dwMilliseconds设置为INFINITE时,函数会无限期等待对象的通知。


    DWORD WaitForMultipleObjects(
      DWORD nCount,
      CONST HANDLE* lpHandles,
      BOOL fWaitAll,
      DWORD dwMilliseconds
    );
    该函数等待多个同步对象。nCount为对象个数,lpHandles为对象句柄数组,fWaitAll为是否等待所有对象(当前必须为FALSE),dwMilliseconds为毫秒数。也就是说等待的对象中只要有一个有通知,函数立即返回。返回WAIT_TIMEOUT表示超时,如果返回WAIT_OBJECT_0到(WAIT_OBJECT_0 + nCount –1)的数,则表示对应的某个对象有通知。

  • 相关阅读:
    去除 CSDN “官方免费去广告 + 万能工具”
    github 搜索技巧常用
    Python 使用 __doc__ 查看文档
    油猴脚本编写自己的脚本来去除知乎 "我们检测到你可能使用了 AdBlock 或 Adblock Plus"
    Unity 中的 C# Instantiate() 方法解析
    《流畅的 Python 》第 2 章笔记
    html 中 a 标签中 href 的路径相关问题
    VScode 复制代码到博客园编辑器自动带上代码标签问题
    Vue在Ubuntu上的部署
    在ubuntu上编译方式安装nginx
  • 原文地址:https://www.cnblogs.com/fengju/p/6173554.html
Copyright © 2020-2023  润新知