我想在特定时间安排一个事件,更准确地说,我想产生一个泊松流量。所以我需要以指数分布生成的特定时间间隔发送一个数据包。我在网上做了一些研究,发现该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- 在主函数中,两个进程是否如我所愿同时发生:我的意思是两个队列是否同时填充?