c++ - C++中的事件调度

标签 c++ c linux sockets

我正在构建一个接收套接字数据的应用程序。我需要在几秒钟后(比如 8 秒后)回复收到的数据。所以我想知道有没有办法安排一个在 8 秒后自动发送套接字数据的事件。我不喜欢在接收线程或任何其他线程中不必要地休眠 8 秒。到目前为止,这是我为接收作为 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");
});

关于c++ - C++中的事件调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45567200/

相关文章:

c++ - 二进制和文本模式编写的文件之间的区别

linux - 从 crontab 运行 shell 脚本时权限被拒绝

C++ wininet,连接到weblogin,如何设置cookies?

比较数组的 C 单元测试框架

c - 通过保持光源固定来旋转 OpenGl 中的金字塔

c - hiredis "undefined reference to"编译错误

python - 如何使用很多参数执行 python subprocess.Popen?

c - tcp 缓冲区中的总数据包长度是否可以超过分配的缓冲区大小?

C++ 用户输入 float 而不是整数

c++ - 为什么我的C++代码不接受输入?我的代码有什么问题?