【发布时间】:2014-01-12 15:45:26
【问题描述】:
我需要捕获终端调整大小的事件,为此我正在捕获(尽管欢迎使用其他方法)SIGWINCH,其内容如下:
std::signal(SIGWINCH, &handle_sigwinch);
当时我希望handle_sinwinch 做类似的事情:
display_type *dt; //inited elsewhere
void handle_sinwinch(int sig) {
dt->async_redraw();
}
async_redraw 将要做的工作发布到内部boost::asio::io_service,然后返回。因此不应该有竞争条件;但是,std::signal 的文档似乎暗示我只能安全地操纵volatile std::sig_atomic_ts。
IE 我可以设置一个标志,然后作为事件循环的一部分从主线程中获取它。
问题是这是异步的,所以没有while(true) 循环或类似的东西。遍历此类标志的唯一方法是创建一个截止时间计时器并定期检查它。这似乎是一个真正的黑客攻击。
所以我的问题是,我对信号的理解是否正确?任何如何做到这一点的见解将不胜感激。
【问题讨论】: