39 windows_39_Thread_Event 线程 - 事件

windows_39_Thread_Event 线程 - 事件

  1. // windows_39_Thread_Event.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. #include "windows.h"
  5. HANDLE g_hEvent = NULL;
  6. HANDLE g_hEvent2 = NULL;
  7. //发送线程
  8. DWORD WINAPI ThreadSend( LPVOID pParam )
  9. {
  10. while (1)
  11. {
  12. SetEvent( g_hEvent );
  13. Sleep( 500 );
  14. SetEvent( g_hEvent2 );
  15. Sleep( 500 );
  16. }
  17. return 0;
  18. }
  19. //接收线程
  20. DWORD WINAPI ThreadRecv( LPVOID pParam )
  21. {
  22. while (1)
  23. {
  24. //等候事件通知
  25. WaitForSingleObject( g_hEvent,INFINITE);
  26. printf( "Hello Event: %p\n", g_hEvent );
  27. }
  28. return 0;
  29. }
  30. DWORD WINAPI ThreadRecv2( LPVOID pParam )
  31. {
  32. while (1)
  33. {
  34. //等候事件通知
  35. WaitForSingleObject( g_hEvent2,INFINITE);
  36. printf( "Hello Event: %p\n", g_hEvent );
  37. Sleep( 500 );
  38. }
  39. return 0;
  40. }
  41. //线程创建
  42. void Create( )
  43. {
  44. DWORD nThreadID = 0;
  45. HANDLE hThread[3] = { NULL };
  46. //创建触发事件
  47. hThread[0] = CreateThread( NULL, 0, ThreadSend, NULL, 0, &nThreadID );
  48. hThread[1] = CreateThread( NULL, 0, ThreadRecv, NULL, 0, &nThreadID );
  49. hThread[2] = CreateThread( NULL, 0, ThreadRecv2, NULL, 0, &nThreadID );
  50. }
  51. int _tmain(int argc, _TCHAR* argv[])
  52. {
  53. //创建自动重置事件
  54. g_hEvent = CreateEvent( NULL, FALSE, FALSE, NULL );
  55. //创建手动重置事件
  56. g_hEvent2 = CreateEvent( NULL, TRUE, FALSE, NULL );
  57. Create( );
  58. getchar( );
  59. //关闭事件
  60. CloseHandle( g_hEvent );
  61. CloseHandle( g_hEvent2 );
  62. return 0;
  63. }

来自为知笔记(Wiz)

时间: 2024-10-09 13:10:45

39 windows_39_Thread_Event 线程 - 事件的相关文章

Python 线程----线程方法,线程事件,线程队列,线程池,GIL锁,协程,Greenlet

主要内容: 线程的一些其他方法 线程事件 线程队列 线程池 GIL锁 协程 Greenlet Gevent 一. 线程(threading)的一些其他方法 from threading import Thread import threading import time def work(): time.sleep(1) print("子线程对象>>>", threading.current_thread()) # 子线程对象 print("子线程名称>

python3 线程事件Event

# -*- coding: utf-8 -*- import time import threading from threading import Thread, Event def conn_mysql(): '''连接数据库''' print("(%s) start to conn_mysql" % threading.current_thread().getName()) event.wait() print("(%s conn_mysql successful)&q

MFC线程(三):线程同步事件(event)与互斥(mutex)

前面讲了临界区可以用来达到线程同步.而事件(event)与互斥(mutex)也同样可以做到. Win32 API中的线程事件 HANDLE hEvent = NULL; void MainTestFun{ hEvent = CreateEvent(NULL,FALSE,FALSE,NULL); SetEvent(hEvent); char g_charArray[4]; CString szResult; //下面三个线程中的任意一个访问g_charArray的时候其他线程都不能访问 AfxBe

Qt经典—线程、事件与Qobject

(转自:http://www.cnblogs.com/newstart/archive/2013/07/20/3202118.html) 先决条件 考虑到本文并不是一个线程编程的泛泛介绍,我们希望你有如下相关知识: C++基础: Qt 基础:QOjbects , 信号/槽,事件处理: 了解什么是线程.线程与进程间的关系和操作系统: 了解主流操作系统如何启动.停止.等待并结束一个线程: 了解如何使用mutexes, semaphores 和以及wait conditions 来创建一个线程安全/可

Qt 学习之路:线程和事件循环

前面一章我们简单介绍了如何使用QThread实现线程.现在我们开始详细介绍如何“正确”编写多线程程序.我们这里的大部分内容来自于Qt的一篇Wiki文档,有兴趣的童鞋可以去看原文. 在介绍在以前,我们要认识两个术语: 可重入的(Reentrant):如果多个线程可以在同一时刻调用一个类的所有函数,并且保证每一次函数调用都引用一个唯一的数据,就称这个类是可重入的(Reentrant means that all the functions in the referenced class can be

异步回调,事件,线程池与协程

在发起一个异步任务时,指定一个函数任务完成后调用函数 为什么需要异步 在使用线程池或进程池提交任务时想要任务的结果然后将结果处理,调用shudown 或者result会阻塞 影响效率,这样的话采用异步调用 比如result本来是用水壶烧水烧开了拿走,烧下一个 用shutdown可以将水壶一起烧但是一个一个拿走 call_done_back是一起烧,每个好了会叫你拿走做其他事 . 1.使用进程池时,回调函数都是主进程中执行执行 2. 使用线程池时,回调函数的执行线程是不确定的,哪个线程空闲就交给哪

Qt学习 之 多线程程序设计(QT通过三种形式提供了对线程的支持)

QT通过三种形式提供了对线程的支持.它们分别是, 一.平台无关的线程类 二.线程安全的事件投递 三.跨线程的信号-槽连接. 这使得开发轻巧的多线程Qt程序更为容易,并能充分利用多处理器机器的优势.多线程编程也是一个有用的模式,它用于解决执行较长时间的操作而不至于用户界面失去响应.在Qt的早期版本中,在构建库时有不选择线程支持的选项,从4.0开始,线程总是有效的. 线程类 Qt 包含下面一些线程相关的类: QThread 提供了开始一个新线程的方法 QThreadStorage 提供逐线程数据存储

初级知识六——C#事件通知系统实现(观察者模式运用)

观察者模式,绝对是游戏中十分重要的一种模式,运用这种模式,可以让游戏模块间的通信变得简单,耦合度也会大大降低,下面讲解如何利用C#实现事件通知系统. 首先定义两个接口,IEventCenter 和IEventHandlerManager,代码如下: 1 public interface IEventCenter : IDestroy 2 { 3 bool AddEventListener(Enum EventType, EventHandler handler); 4 5 bool Remove

<<APUE>> 线程

一个进程在同一时刻只能做一件事情,线程可以把程序设计成在同一时刻能够做多件事情,每个线程处理各自独立的任务.线程包括了表示进程内执行环境必需的信息,包括进程中标识线程的线程ID.一组寄存器值.栈.调度优先级和策略.信号屏蔽字.errno变量以及线程似有数据.进程的所有信息对该进程的所有线程都是共享的,包括可执行的程序文本.程序的全局内存.栈及文件描述符. 使用线程的好处:(1)为每种事件分配单独的线程.能够简化处理异步事件的代码:(2)多个线程自动地可以访问相同的存储地址空间和文件描述符:(3)