延迟执行

Sleep()#

1
2
3
4
5
6
7
8
#include <windows.h>

int main() {
    // 单位是毫秒
    Sleep(5000);
    MessageBoxA(NULL, "Hello!", "Success", MB_OK);
    return 0;
}

WaitForSingleObject#

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#include <windows.h>

int main() {

    WaitForSingleObject(GetCurrentProcess(), 5000);

    MessageBoxA(NULL, "5秒钟","test", MB_OK | MB_ICONINFORMATION);

    return 0;
}

IcmpSendEcho#

 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
#include <windows.h>
#include <iphlpapi.h>
#include <icmpapi.h>
#include <iostream>

#pragma comment(lib, "iphlpapi.lib")
#pragma comment(lib, "ws2_32.lib")

int main() {

    HANDLE hIcmp = IcmpCreateFile();

    // 构造一个不存在的 IP 地址 (例如 1.1.1.1)
    IPAddr targetIp = inet_addr("192.0.2.1");

    char sendData[] = "test";
    LPVOID replyBuffer = (VOID*)malloc(sizeof(ICMP_ECHO_REPLY) + sizeof(sendData));

    // 设置超时时间为 5000 毫秒
    IcmpSendEcho(hIcmp, targetIp, sendData, sizeof(sendData), NULL, replyBuffer, sizeof(ICMP_ECHO_REPLY) + sizeof(sendData), 5000);

    std::cout << "5 seconds passed." << std::endl;

    free(replyBuffer);
    IcmpCloseHandle(hIcmp);
	MessageBoxA(NULL, "5 seconds passed.", "Info", MB_OK);
    return 0;
}

Select (Socket 超时)#

 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
#include <winsock2.h> 
#include <iostream> 

#pragma comment(lib, "ws2_32.lib") 

int main() {
    // 1. 初始化
    WSADATA wsaData;
    WSAStartup(MAKEWORD(2, 2), &wsaData);

    // 2. 创建一个占位 Socket
    SOCKET dummy = socket(AF_INET, SOCK_STREAM, 0);

    FD_SET readfds;
    FD_ZERO(&readfds);
    FD_SET(dummy, &readfds);

    // 3. 设置时间
    TIMEVAL tv;
    tv.tv_sec = 5;
    tv.tv_usec = 0;

    // 4. 执行延时
    select(0, &readfds, NULL, NULL, &tv);

    // 5. 清理
    closesocket(dummy);
    WSACleanup();

    std::cout << "[*] 5 seconds passed." << std::endl;
    MessageBoxA(NULL, "延时成功!", "Test", MB_OK);

    return 0;
}