特定の時間にイベントをスケジュールしたいのですが、より正確には、ポアソン トラフィックを生成したいと考えています。したがって、指数分布から生成される特定の時間間隔でパケットを送信する必要があります。インターネットでいくつかの調査を行ったところ、このsetitimer
方法で特定の時間後にアラーム信号をスケジュールできることがわかりましたが、私の場合の使用方法がわかりません。
アドバイスをありがとう。私はあなたの言うことに従いました。まだ少しクエリがあります。私のコードでは、2 つの独立したイベントを同時にスケジュールする必要があります。通常は、2 つのキューを同時に満たす必要があります。これは私が今やったことです:
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
}
2つの質問があります:
1- sa_handler メソッドでポインター「this」を使用して関数を内部的に呼び出すのは良い解決策ですか?
2- メイン関数では、2 つのプロセスが同時に実行されますか? つまり、両方のキューが同時に満たされているということですか?