既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
#include <Windows.h> //需要包含该头文件
#include <iostream>
using namespace std;
#pragma comment(lib,"Winmm.lib") //For timeSetEvent
//定时器的回调函数
void WINAPI TimerCallback(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2)
{
cout << ">>> 定时器回调函数" << endl;
}
int main()
{
DWORD_PTR dwUser = NULL;
// 设置定时器
int timerID = timeSetEvent(1000, 1, (LPTIMECALLBACK)TimerCallback, dwUser, TIME_PERIODIC);
if(timerID != NULL)
cout << ">>> 定时器创建成功" << endl;
char ch = '0';
while(ch != 'q')
{
ch = getchar();
}
timeKillEvent(timerID); //关闭定时器
return 0;
}
不过,在MSDN上看到, timeSetEvent 函数已经过时了,现在都在用 CreateTimerQueueTimer 函数。
周期和网络调试助手通信
前面一篇文章:Windows下C语言程序和网络调试助手通信
已经讲解了C语言程序和网络调试助手之间的通信,现在我们更进一步,创建周期性的C语言程序来和网络调试助手进行通信。
创建周期性的函数任务,我们需要使用定时器,利用Windows提供的timeSetEvent,我们可以方便地创建出周期性的函数任务。
代码如下:
#include <Windows.h> //需要包含该头文件
#include <stdio.h>
#pragma comment(lib,"Winmm.lib") //For timeSetEvent
#include <WinSock2.h>
#pragma comment(lib, "ws2\_32.lib") //加载 ws2\_32.dll
//定时器1的回调函数
void WINAPI TimerCallback1(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2)
{
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
//创建套接字
SOCKET sock = socket(PF_INET, SOCK_DGRAM, 0);
//服务器地址信息
struct sockaddr\_in servAddr;
memset(&servAddr, 0, sizeof(servAddr)); //每个字节都用0填充
servAddr.sin_family = PF_INET;
servAddr.sin_addr.s_addr = inet\_addr("127.0.0.1");
servAddr.sin_port = htons(1234);
printf("我是第一个周期函数,周期为1s\n");
char buffer[100] = "wiliyuan";
sendto(sock, buffer, strlen(buffer), 0, (struct sockaddr\*)&servAddr, sizeof(servAddr));
}
//定时器2的回调函数
void WINAPI TimerCallback2(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2)
{
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
//创建套接字
SOCKET sock = socket(PF_INET, SOCK_DGRAM, 0);
//服务器地址信息
struct sockaddr\_in servAddr;
memset(&servAddr, 0, sizeof(servAddr)); //每个字节都用0填充
servAddr.sin_family = PF_INET;
servAddr.sin_addr.s_addr = inet\_addr("127.0.0.1");
servAddr.sin_port = htons(2345);
printf("我是第二个周期函数,周期为2s\n");
char buffer[100] = "xky";
sendto(sock, buffer, strlen(buffer), 0, (struct sockaddr\*)&servAddr, sizeof(servAddr));
}
int main()
{
DWORD_PTR dwUser = NULL;
// 设置定时器
int timerID1 = timeSetEvent(1000, 1, (LPTIMECALLBACK)TimerCallback1, dwUser, TIME_PERIODIC);
if(timerID1 != NULL)
printf("定时器1创建成功\n");
int timerID2 = timeSetEvent(2000, 1, (LPTIMECALLBACK)TimerCallback2, dwUser, TIME_PERIODIC);
if(timerID2 != NULL)
![img](https://img-blog.csdnimg.cn/img_convert/fd13ef32b46a98aef6b631e4ad32d914.png)
![img](https://img-blog.csdnimg.cn/img_convert/04ba1739e3114d4d7c1f23e21540b767.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**
文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**