C++MFC创建事件

这篇具有很好参考价值的文章主要介绍了C++MFC创建事件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概念

创建事件:

HANDLE CreateEvent(

LPSECURITY_ATTRIBUTES lpEventAttributes, // SECURITY_ATTRIBUTES结构指针,可为NULL
 BOOL bManualReset, // 手动/自动
  // TRUE:表示手动,在WaitForSingleObject后必须手动调用ResetEvent清除信号
  // FALSE:表示自动,在WaitForSingleObject后,系统自动清除事件信号
 BOOL bInitialState, //初始状态,FALSE为无信号,TRUE为有信号
 LPCTSTR lpName //事件的名称
);

SetEvent/ResetEvent分别将EVENT置为这两种状态分别是发信号与不发信号。

可使用WaitForSingleObject或者WaitForMultipleObjects来等待事件。

二、代码实例

#include “stdafx.h”
#include
#include
#include <windows.h>
using namespace std;

HANDLE h_event1 = NULL;
HANDLE h_event2 = NULL;
DWORD WINAPI FunProc1(LPVOID lpParameter);
DWORD WINAPI FunProc2(LPVOID lpParameter);

DWORD WINAPI FunProc1(LPVOID lpParameter)
{
cout << “线程1开始运行。\n” << endl;
while (WAIT_OBJECT_0 != WaitForSingleObject(h_event1, 300))
{
cout << “线程1正在等待event1\n” << endl;
}
cout << “线程1等到了event1,线程1结束。\n” << endl;
ResetEvent(h_event1);
return 0;
}

DWORD WINAPI FunProc2(LPVOID lpParameter)
{
cout << “线程2开始运行。\n” << endl;
while (WAIT_OBJECT_0 != WaitForSingleObject(h_event2, 300))
{
cout << “线程2正在等待event2\n” << endl;
}
cout << “线程2等到了event2,线程2结束。\n” << endl;
Sleep(350);
SetEvent(h_event1);
return 0;
}

int main(int argc, char** argv)
{
h_event1 = CreateEvent(NULL, true, false, _T(“event_one”));
h_event2 = CreateEvent(NULL, false, false, _T(“event_two”));
HANDLE hThread1;
hThread1 = CreateThread(NULL, 0, FunProc1, NULL, 0, NULL);
HANDLE hThread2;
hThread2 = CreateThread(NULL, 0, FunProc2, NULL, 0, NULL);
Sleep(1000);
SetEvent(h_event2);
while (WaitForSingleObject(hThread1, 150) != WAIT_OBJECT_0 || WaitForSingleObject(hThread2, 150) != WAIT_OBJECT_0)
{
cout << “线程还没有结束,主程序等了150ms。\n” << endl;
}
CloseHandle(hThread1);
CloseHandle(hThread2);
CloseHandle(h_event1);
CloseHandle(h_event2);
system(“pause”);
}
在主函数中,创建了两个事件对象,h_event1与h_event2;其中h_event1第二个参数为true,表示其在WaitForSingleObject后必须手动调用ResetEvent清除信号,h_event1第二个参数为false,表示其在WaitForSingleObject后系统自动清除事件信号,两个事件对象创建时第三个参数都为false,表示初始都为无信号状态;

接下来启动两个线程,第一个线程的线程函数中每隔300ms查询一次h_event1的状态,直到h_event1为有信号停止,并将h_event1置为无信号状态;第一个线程的线程函数中每隔300ms查询一次h_event2的状态,直到h_event2为有信号停止,并在h_event2有信号之后在等待350ms之后将h_event1置为有信号状态;

主函数在启动两个线程之后等待1秒之后将h_event2置为有信号状态,此时两个线程都应已查询三次信号量状态并将等待情况输出,在h_event2有信号之后线程2会结束,并在等待350ms将事件1修改,在此期间线程1会再次查询,同时主函数会继续执行,再while循环中查询两个线程的状态,当两个并未都结束时每隔150ms输出一次信息。文章来源地址https://www.toymoban.com/news/detail-545179.html

到了这里,关于C++MFC创建事件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MFC】10.MFC六大机制:RTTI(运行时类型识别),动态创建机制,窗口切分,子类化-笔记

    C++: ##是拼接 #是替换成字符串 这是MFC提供的运行时类信息的使用,如果我们自己创建一个类,如果想用这些方法,必须要满足三个条件: 这个类必须继承于CObject类 类内必须声明DECLARE_DYNAMIC 类外必须实现IMPLENENT_DYNAMIC 我们来看看是如何实现的: 这里给出RTTI的图,每一个类中

    2024年02月13日
    浏览(28)
  • MFC创建和使用OCX控件

    2024年02月13日
    浏览(34)
  • MFC动态创建控件与建立消息响应

    以动态创建按钮为例,新建MFC工程 在解决方案管理器,Resource.h中编辑,添加一个IDC_BUTTON0的资源ID

    2024年02月14日
    浏览(31)
  • 线程的创建以及使用(MFC/C/C++)

    目录 一、创建线程的几种方法 1、使用POSIX线程库(pthread)(C) 2、 使用Windows线程库(Win32 API)(C) 3、使用C++11标准库 二、线程的应用(常用实例,附上完整代码) 1、CreateThread创建线程的实例 一、创建线程的几种方法 在C/C++中,有多种方法可以创建线程,以下列出了其中

    2024年02月15日
    浏览(45)
  • 操作系统——MFC实现进程创建和通信2

    我接着上篇博客讲,如果没有构建项目的童鞋请移步到操作系统——MFC实现进程创建和通信1 实现进程通信的方法有很多,我们先用一个比较简单的方法实现一下。 window.postMessage() 方法可以安全地实现跨源通信。通常,对于两个不同页面的脚本,只有当执行它们的页面位于具

    2024年02月07日
    浏览(28)
  • MFC中的窗体绘制事件函数:OnCtlColor、OnPaint、OnNcPaint、OnDrawItem、OnEraseBkgnd、OnDraw

    参考:https://learn.microsoft.com/ 即将绘制子控件时,框架会调用此成员函数。 参数 pDC 包含指向子窗口的显示上下文的指针。 可能是暂时性指针。 pWnd 包含指向请求颜色的控件的指针。 可能是暂时性指针。 nCtlColor 包含以下用于指定控件类型的值之一: CTLCOLOR_BTN 按钮控件 CTL

    2024年02月12日
    浏览(24)
  • VS2019 MFC CreateFontW 创建字体函数详细解读

    项目 2022/09/28 4 个参与者 反馈 CreateFont  函数创建具有指定特征的逻辑字体。 随后可将逻辑字体选为任何设备的字体。 C++复制 [in] cHeight 字体字符单元格或字符的高度(以逻辑单位为单位)。 字符高度值 (也称为 em 高度) 是字符单元格高度值减去内部前导值。 字体映射器按以

    2024年02月16日
    浏览(38)
  • MFC 非线程创建模态化窗口 实现工具栏拓展

    1.1 在Dlg.h文件中声明变量和定义资源ID 1.2 在资源视图中导入Bitmap资源图片 可以在右击资源符号中查看具体ID值 1.3 在Dlg.cpp文件中的OnInitDialog()方法中导入Bitmap与按钮ID 1.4 开启鼠标停靠信息提示 先在Dlg.h中增加函数声明 再Dlg.cpp中实现 增加消息映射宏开启提示 1.5 效果呈现 2.

    2024年02月10日
    浏览(27)
  • C++/MFC工程[1]——创建新项目及常用类介绍

    1、选择“MFC应用”,点击“下一步” 2、 配置项目 默认项目名称如下,此处使用默认名。 点击“创建”,应用程序类型选择“单个文档”,项目样式选择“MFC standard”。 注: 本文以单文档为例   点击“完成”。 3、运行新项目 直接点击“本地调试器”,发现此时已经是一

    2024年02月04日
    浏览(35)
  • 【MFC】09.MFC视图-笔记

    MFC视图窗口:CView类 显示数据/画面 我们之前的绘图消息,都是在框架类上画出来的 视图窗口就覆盖在框架窗口上 视图窗口本质上也是窗口,只是和框架窗口风格不同 CView类也继承于CWnd类 CView也能处理消息,因为它继承于CWnd类 试图窗口没有边框等 视图窗口是框架窗口的子

    2024年02月14日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包