Win32控制台中使用定时器的方法
来源:互联网 发布:获取windows权限 编辑:程序博客网 时间:2024/05/24 23:14
在MFC中用OnTimer()函数就可以很方便的实现定时事件,但在Win32控制台工程中没有消息循环,MSDN里也不推荐把SetTimer()用在Console Applications里。
同理,在DLL工程中创建定时器也需用这种方法,因为DLL没有窗口,没窗口就没有消息循环,没消息循环就收到不到定时消息。如果DLL有窗口的话,就可以在SetTimer()时指定窗口句柄也行,直接用GetForegroundWindow()得到句柄。
方法:在一个单独的线程中创建定时器,再通过指定的回调函数来处理定时事件。
#include <stdio.h>#include <windows.h>#include <conio.h>UINT cnt = 0;//定时器回调函数void CALLBACK TimeProc(HWND hwnd, UINT message, UINT idTimer, DWORD dwTime);//线程回调函数DWORD CALLBACK ThreadProc(PVOID pvoid); //主函数int main(){ //创建线程 DWORD dwThreadId; HANDLE hThread = CreateThread(NULL, 0, ThreadProc, 0, 0, &dwThreadId); printf("hello, thread start!\n"); //得到键盘输入后再退出 getch(); return 0;} //线程DWORD CALLBACK ThreadProc(PVOID pvoid){ //强制系统为线程简历消息队列 MSG msg; PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE); //设置定时器 SetTimer(NULL, 10, 1000, TimeProc); //获取并分发消息 while(GetMessage(&msg, NULL, 0, 0)) { if(msg.message == WM_TIMER) { TranslateMessage(&msg); // 翻译消息 DispatchMessage(&msg); // 分发消息 } } KillTimer(NULL, 10); printf("thread end here\n"); return 0;}//定时事件void CALLBACK TimeProc(HWND hwnd, UINT message, UINT idTimer, DWORD dwTime){ cnt ++; printf("thread count = %d\n", cnt);}
0 0
- Win32控制台中使用定时器的方法
- Win32控制台中使用CString类的方法
- win32汇编---控制台中输出
- java 控制台中读取数据的方法
- 控制台中使用SetTimer的提醒
- 控制台中使用settimer
- java使用Scanner类循环从控制台中获取数据的方法代码。
- java使用Scanner类循环从控制台中获取数据的方法代码。
- Win32 API中使用定时器的三种方法
- Win32 API中使用定时器的三种方法
- Java从控制台中读取数据的各种方法
- Winfrom和控制台中static修饰方法的问题
- Java从控制台中读取数据的各种方法
- Java从控制台中读取数据的各种方法
- 在控制台中动态引入jquery的方法
- 控制台中使用多线程编程
- WIN32汇编定时器的使用
- 在Linux的控制台中使用GDB调试程序
- 帝国ECMS6.5灵动标签汇集
- POJ 1067 && HDU 1527 取石子游戏(博弈论)
- 杭电1302 The Snail
- 流程控制《1》if
- OpenGL导入三维模型
- Win32控制台中使用定时器的方法
- swift学习 一 基础部分 (上)
- 流程控制《2》switch
- [leetcode] Largest Number
- Codeforces Round #285 (Div. 1)A. Misha and Forest(构造题)
- 流程控制《3》while
- 嵌套《1》
- 嵌套《2》
- Android_常见控件之DatePicker详解