我正在构建一个应用程序,其中我接收套接字数据。我需要在几秒钟后回复收到的数据(比如8秒钟后)。所以我想知道有没有一种方法可以安排一个在8秒后自动发送套接字数据的事件。我不喜欢在接收线程或任何其他线程中不必要地睡眠8秒。这是我到目前为止为接收socket数据(pthread)而编写的。

long DataSock_fd=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);

    StSocketAddress.sin_family=AF_INET; //address family
    StSocketAddress.sin_addr.s_addr=inet_addr("10.10.10.10");   //load ip address
    StSocketAddress.sin_port=htons(1234);   //load port number
    //bind the above socket to the above mentioned address, if result is less than 0(error in binding)
    if(bind(DataSock_fd,(struct sockaddr *)&StSocketAddress,sizeof(StSocketAddress))<0)
    {
        close(DataSock_fd); //close the socket
        perror("error while binding\n");
        exit(EXIT_FAILURE); //exit the program
    }

char Buff[1024];
long lSize = recvfrom(DataSock_fd,(char *)Buff,sizeof(Buff),0,NULL,NULL);

但我一直在安排一个8秒后发送数据的事件。

最佳答案

看看这个SO answer
您可以使用这样的<async>来解决您的问题:

auto f = std::async(std::launch::async, [] {
    std::this_thread::sleep_for(std::chrono::seconds(5));
    printf("(5 seconds later) Hello");
});

09-04 21:21