我正在构建一个应用程序,其中我接收套接字数据。我需要在几秒钟后回复收到的数据(比如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");
});