Как за случайные промежутки времени добавлять новый элемент в массив?

У меня приложение работающее по принципу обработки очереди звонков.В статическом массиве хранятся номера для обработки, после рандомных промежутков времени нужно добавлять в очередь рандомный мобильный номер.Вопрос, как можно это реализовать?

#include <iostream>
#include <Windows.h>
#include <random>
#include <ctime>
using namespace std;
void addNum(int* arr,const int count) {
    srand(time(0));
    for (size_t i = 0; i < count; i++)
    {
        arr[i] = rand() % (1000000000 + 1- 100000000)+ 100000000;
    }
}
void deleteNum(int* arr, const int count);
void show(int* arr, const int  count){
    for (size_t i = 0; i < count; i++)
    {
        cout << i+1<<") " << "+994" << arr[i] << '\n';
    }
}
int main(){
    setlocale(LC_ALL, "rus");
    const int count = 5;//максимум номеров в очереди
    int num[count]{};
    addNum(num, count);
    cout << "Текущие номера в очереди:\n";
    show(num, count);
    cout << "Текущий обрабатываемый номер:\n";
    cout << "+994" << *num;//первый номер в массиве - обрабатываемый
}

Ответы (1 шт):

Автор решения: AlexGlebe

Время ожидания следующего клиента в очереди можно вычислить, используя функцию распределения этой случайной величины и она равна :

F = 1 - Exp [ - t / среднее ]
t = - среднее * Log [ 1 - F ]

И после вычисления паузы уже можно вызывать функцию sleep.

double waittime ( double const average ) {
  return - average * log ( 1.0 - ( ( double ) rand ( ) + 0.5 ) /
   ( ( double ) RAND_MAX + 1.0 ) ) ;
}

..

sleep ( waittime ( 3 ) ) ;

или

double w = waittime ( 3 ) ;
struct timespec t = { ( time_t ) w ,
  ( long int ) ( ( w - floor ( w ) ) * 1000000000.0 ) } ;
nanosleep ( & t , 0 ) ;

После выхода из сна вы можете добавлять номер. Если вы хотите, чтобы это было всё автоматом, то запустите процесс в дополнительном параллельном потоке.

→ Ссылка