【发布时间】:2020-10-23 17:09:05
【问题描述】:
我想编写一个 C++ 程序,它应该等待 linux 信号(毫秒分辨率),但我找不到实现这一点的可能性。
以下测试代码应该在 500 毫秒后终止,但它不会。
#include <iostream>
#include <csignal>
#include <unistd.h>
#include <chrono>
#include <future>
using namespace std::chrono_literals;
extern "C" void handler(int s) {
}
int main() {
std::signal(SIGUSR1, handler);
bool started = false;
auto f = std::async(std::launch::async, [&] {
auto start = std::chrono::high_resolution_clock::now();
started = true;
//usleep(1000000);
sleep(1);
//std::this_thread::sleep_for(1s);
std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(
std::chrono::high_resolution_clock::now() - start).count() << "ms";
});
std::this_thread::sleep_for(500ms);
std::raise(SIGUSR1);
}
有人知道如何解决这个问题吗?
【问题讨论】:
-
这很容易使用信号和计时器文件描述符完成,但是这是一个相当高级的主题。从有关 timerfd 和 signalfd 系统调用的 Linux 手册页开始,然后按照自己的方式工作。
-
程序会显示什么吗?
标签: c++ linux c++17 system-calls usleep