在 Microsoft Visual Studio 的 win32控制台程序中使用C语言写一个定时器,并封装成函数。
时间: 2024-10-13 09:04:46 浏览: 22
在 Microsoft Visual Studio 中创建一个 Win32 控制台应用程序并使用 C 语言实现一个简单的定时器,可以利用 Windows API 提供的 `CreateThread` 和 `WaitForSingleObject` 函数来达到这个目的。以下是一个基本的封装示例:
```c
#include <windows.h>
#include <stdio.h>
// 定义一个结构体来保存定时器的数据
typedef struct {
HANDLE hTimer; // 定时器句柄
unsigned int delay_ms; // 定时间隔
} TimerData;
// 创建定时器的函数
TimerData* create_timer(unsigned int delay_ms) {
TimerData* timer = (TimerData*)malloc(sizeof(TimerData));
if (!timer) {
printf("Memory allocation failed.\n");
return NULL;
}
// 创建一个新的线程来处理定时任务
timer->hTimer = CreateThread(NULL, 0, TimerCallback, timer, 0, NULL);
if (timer->hTimer == NULL) {
free(timer);
printf("Failed to create timer thread.\n");
return NULL;
}
timer->delay_ms = delay_ms;
return timer;
}
// 这是处理定时器回调的函数,这里只是一个简单示例,实际应用可能需要更复杂的业务逻辑
DWORD WINAPI TimerCallback(LPVOID lpParam) {
TimerData* timer = (TimerData*)lpParam;
Sleep(timer->delay_ms * 1000); // 等待指定时间
// 执行你需要的任务...
// ...
// 当定时结束后,自行清理资源
CloseHandle(timer->hTimer);
free(timer);
return 0;
}
// 使用定时器前,记得释放它
void destroy_timer(TimerData* timer) {
if (timer && timer->hTimer != NULL) {
CloseHandle(timer->hTimer);
free(timer);
}
}
int main() {
TimerData* myTimer = create_timer(5000); // 设置定时间隔为5秒
if (myTimer) {
// 主线程继续运行...
// ...
// 程序结束时,调用 destroy_timer 清理定时器
destroy_timer(myTimer);
}
return 0;
}
```
阅读全文