如何在C++中使用sigaction和itimergeval结构同时调度两个事件
How to schedule simultaneously two events using sigaction and itimerval structures in C++ ?
我想在特定的时间安排一个事件,更准确地说,我想生成一个poisson流量。因此,我需要以指数分布生成的特定时间间隔发送数据包。我在网上做了一些研究,发现setitimer
方法可以在一定时间后调度报警信号,但我不知道如何在我的情况下使用它。
谢谢你的建议。我听了你的话。我仍然有一个小问题:在我的代码中,我需要同时安排两个独立的事件,通常是同时填充两个队列。这就是我现在所做的:
void Queue_class::SetPoissonTraficFirstQueue(void)
{ // add one packet to the queue
struct sigaction act ;
struct itimerval timer ;
act.sa_handler = this ;
sigempty_set(&act.sa_mask) ; // no signal is added to the sa_mask
act.sa_flags = 0 ;
sigaction(SIGALARM, &act,0) ;
timer.it_value.tv_usec = 0 ;
timer.it_value.tv_sec = exponential_variable() ; // generates a random exponential variable
timer.it_interval.tv_sec = 0 ;
timer.it_interval.tv_usec = 0 ;
setitimer(ITIMER_REAL, *timer, NULL) ;
}
其他队列的函数相同,但具有不同的指数随机变量
总的来说,我做以下事情:
int main()
{
Queue_class queue ;
queue.SetPoissonTraficFirstQueue() ;
queue.SetPoissonTraficSecondQueue() ;
// do business
}
我有两个问题:
1-在sa_handler方法中用指针"this"在内部调用函数是一个好的解决方案吗?
2-在主函数中,这两个过程是否如我所愿同时发生:我的意思是,两个队列是否同时填充?
假设您想将计时器安排在今天下午6点,您会得到该时间的time_t
(使用例如strptime
或其他函数),然后您可以使用difftime
来获得从现在到那时的秒数。此值可用于计时器的"值"(即itimerval.it_value.tv_sec
)。如果间隔被清除,那么这将是一个一次性计时器。
另一方面,如果你想创建一个循环计时器,每X秒调用一次,那么将值和间隔都设置为X.
在这两个花瓶中,都使用ITIMER_REAL
,并有一个信号处理程序catch SIGALRM
。
相关文章:
- 如何在c++中实现处理器调度模拟器
- Android NDK传感器向事件队列报告奇怪的间隔
- 从文本文件中读取时钟时间和事件时间并进行处理
- WMI检测进程创建事件-c++
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 处理闪烁窗口事件
- C++Builder中的OnClick事件签名存在问题
- 跟踪滚动条上的鼠标事件
- 什么是事件表 (wxWidgets)?
- 如何在 MFCaptureEngine 中获取"Camera removed"事件
- 给定顺序中的事件处理
- 如何实现从 Windows 脚本主机到脚本的事件调度
- 事件调度员的设计
- 如何在C++中使用sigaction和itimergeval结构同时调度两个事件
- 调用 Director::getInstance()->popScene() 后,调度停止以触发事件
- 用于流程/任务调度的简单离散事件模拟库 (C++)
- 是否可以捕获翻译/调度消息循环中的窗口消息/事件
- 集中式事件调度的优点和缺点
- SDL中的调度事件
- 用c++语言设计具有类型安全的事件调度程序、事件源和事件监视程序