Как за случайные промежутки времени добавлять новый элемент в массив?
У меня приложение работающее по принципу обработки очереди звонков.В статическом массиве хранятся номера для обработки, после рандомных промежутков времени нужно добавлять в очередь рандомный мобильный номер.Вопрос, как можно это реализовать?
#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 ) ;
После выхода из сна вы можете добавлять номер. Если вы хотите, чтобы это было всё автоматом, то запустите процесс в дополнительном параллельном потоке.