42 windows_42_Thread_WaitableTimer 线程 - 等候线程

windows_42_Thread_WaitableTimer 线程 - 等候线程

  1. // windows_42_Thread_WaitableTimer.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. #include "windows.h"
  5. HANDLE g_hTimer = NULL;
  6. //等候线程
  7. DWORD WINAPI TimerThread( LPVOID pParam )
  8. {
  9. while (true)
  10. {
  11. WaitForSingleObject( g_hTimer, INFINITE );
  12. printf( "Hello Timer\n" );
  13. }
  14. }
  15. VOID CALLBACK TimerAPCProc(
  16. LPVOID lpArgToCompletionRoutine, // data value
  17. DWORD dwTimerLowValue, // timer low value
  18. DWORD dwTimerHighValue // timer high value
  19. )
  20. {
  21. printf( "-------------APC TimerProc-------------\n" );
  22. }
  23. void APCTimer( )
  24. {
  25. //创建定时器
  26. HANDLE hTimer = CreateWaitableTimer( NULL, FALSE, NULL );
  27. //设置定时器
  28. UINT64 nDueTime = -10000000;
  29. SetWaitableTimer( hTimer, (PLARGE_INTEGER)&nDueTime, 1000, TimerAPCProc, NULL, FALSE );
  30. while (true)
  31. {
  32. SleepEx( -1, TRUE );
  33. }
  34. //关闭句柄
  35. CloseHandle( hTimer );
  36. }
  37. void Create( )
  38. {
  39. //创建定时器
  40. g_hTimer = CreateWaitableTimer( NULL, FALSE, NULL );
  41. //设置定时器
  42. UINT64 nDueTime = -50000000;//百纳秒级别
  43. SetWaitableTimer( g_hTimer, (PLARGE_INTEGER)&nDueTime/*转换成UINT64处理*/,
  44. 1000, NULL, NULL, FALSE );
  45. //创建等候线程
  46. DWORD dwThreadID = 0;
  47. HANDLE hThread = CreateThread( NULL, 0, TimerThread, NULL,
  48. 0, &dwThreadID );
  49. WaitForSingleObject( hThread, INFINITE );
  50. //关闭定时器
  51. CloseHandle( g_hTimer );
  52. }
  53. int _tmain(int argc, _TCHAR* argv[])
  54. {
  55. //Create( );
  56. APCTimer( );
  57. return 0;
  58. }

来自为知笔记(Wiz)

时间: 2024-10-08 10:14:23

42 windows_42_Thread_WaitableTimer 线程 - 等候线程的相关文章

C#中的线程(二) 线程同步基础

1.同步要领 下面的表格列展了.NET对协调或同步线程动作的可用的工具:                       简易阻止方法 构成 目的 Sleep 阻止给定的时间周期 Join 等待另一个线程完成                       锁系统 构成 目的 跨进程? 速度 lock 确保只有一个线程访问某个资源或某段代码. 否 快 Mutex 确保只有一个线程访问某个资源或某段代码.可被用于防止一个程序的多个实例同时运行. 是 中等 Semaphore 确保不超过指定数目的线程访问某

基础学习day11--多线程一线程的创建,运行,同步和锁

1.1.进程和线程 进程:一个应用程序一般都是一个进程,正在进行的程序 每一个进程最少都有一个线程,都有一个执行顺序,该顺序是一个执行路径或者一个控制单元 线程:进程中一个独立的控制单元,线程控制着进程的执行. windows中的任务管理器,可以查看进程,linux下通过ps命令 线程是进程的最小单位 线程依赖于进程 线程随着进程的创建和创建,随着进程的结束而消亡 如迅雷:可以同时开启多个下载,就是多线程 多个程序同时执行,时CPU在很快的切换,看上去是同时执行,实际上是在CPU在切换执行. 多

Java线程:线程状态的转换

Java线程:线程状态的转换 一.线程状态 线程的状态转换是线程控制的基础.线程状态总的可分为五大状态:分别是生.死.可运行.运行.等待/阻塞.用一个图来描述如下: 1.新状态:线程对象已经创建,还没有在其上调用start()方法. 2.可运行状态:当线程有资格运行,但调度程序还没有把它选定为运行线程时线程所处的状态.当start()方法调用时,线程首先进入可运行状态.在线程运行之后或者从阻塞.等待或睡眠状态回来后,也返回到可运行状态. 3.运行状态:线程调度程序从可运行池中选择一个线程作为当前

Java - "JUC线程池" 线程状态与拒绝策略源码分析

Java多线程系列--"JUC线程池"04之 线程池原理(三) 本章介绍线程池的生命周期.在"Java多线程系列--"基础篇"01之 基本概念"中,我们介绍过,线程有5种状态:新建状态,就绪状态,运行状态,阻塞状态,死亡状态.线程池也有5种状态:然而,线程池不同于线程,线程池的5种状态是:Running, SHUTDOWN, STOP, TIDYING, TERMINATED. 线程池状态定义代码如下: private final AtomicI

基础学习day12--多线程一线程之间的通信和常用方法

一.线程之间的通信 1.1.线程之间的通信方法 多个线程在处理统一资源,但是任务却不同,这时候就需要线程间通信.    等待/唤醒机制涉及的方法:    1. wait():让线程处于冻结状态,被wait的线程会被存储到线程池中.    2. notify():唤醒线程池中的一个线程(任何一个都有可能).    3. notifyAll():唤醒线程池中的所有线程.  备注    1.这些方法都必须定义在同步中,因为这些方法是用于操作线程状态的方法.    2.必须要明确到底操作的是哪个锁上的线

java线程和线程池的使用

java线程和线程池 一.创建多线程的方式 java多线程很常见,如何使用多线程,如何创建线程,java中有两种方式,第一种是让自己的类实现Runnable接口,第二种是让自己的类继承Thread类.其实Thread类自己也是实现了Runnable接口.具体使用实例如下: 1.通过实现Runnable接口方式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class MyThread1 implements Runnab

Java之线程———GUI线程

当java程序包含图形用户界面(GUI)时,Java虚拟机在运行应用程序时会自动启动更多的线程,其中有两个重要的线程:AWT-EventQuecue 和 AWT-Windows. AWT-EventQuecue 线程负责处理GUI事件,AWT-EventQuecue线程负责将窗体或组件绘制到桌面.JVM保证各个线程都有使用CPU资源的机会. 样列: 1 package tes; 2 3 import java.awt.Color; 4 import java.awt.FlowLayout; 5

android线程及线程池

众所周知,在UI系统中进行一些耗时操作,都会导致卡顿现象,因为一次刷新在16ms,如果当次操作过了这个时间,那么用户就能感觉到明显的卡顿,甚至引起ANR . 对于这种情况,一般都是再起一个线程,进行一些耗时的操作,通过继承Thread 或者实现Runnable接口,重写run方法,来实现创建新线程,进行耗时操作的需求.由于java的单继承关系,首推实现Runnable方法,这样不会太过臃肿. private void runThread() { Thread t1 = new Thread(ne

利用NtQuerySystemInformation函数遍历进程,遍历线程,获取线程挂起或运行状态

版权声明:专注于计算机网络安全学习 https://blog.csdn.net/u011672712/article/details/51586030 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61