计算每秒添加到队列中添加的请求数 - 始终返回为零
Calculate number of requests added to queue per a second - always comes back as zero
我正在研究一个通过API接收请求并将其添加到FIFO的项目。我希望能够记录收到的请求数(在队列中添加)和处理的请求数(从队列中删除)。目前,我试图收到第二个平均值。
我是通过拥有一个包含60个元素的longs来做到这一点,每个元素将存储该第二个收到的请求数。
我正在使用以下内容进行此操作:
if (fifo->enqueue(crashInfo))
{
this->requestProcessMutex.lock();
this->currentRequestsASecond++; //Used to get the total requests a second
this->requestProcessMutex.unlock();
cout << "Current Requests Incremented to " << this->currentRequestsASecond << endl;
return true;
}
else
{
return false;
}
从上面的代码中,代码表明计数器正在递增,然后按预期重置为0。
要将请求添加到我进行的数组中,我还每10秒记录了当前平均值。
void FIFOManager::processRequestsSecondArray()
{
int counter = 0;
time_t lastLoggedTime = std::time(NULL);
while (this->bitsLibrary->getApplicationStatus() != StatusManager::ApplicationStatus::Stopping)
{
this->requestProcessMutex.lock();
time_t current_time = std::time(NULL);
long timeDiff = current_time - lastLoggedTime;
if (timeDiff >= 10) //Only log every 10 seconds
{
stringstream logstream;
logstream << this->getAverageRequestProcessTime(AverageRetrievalType::RequestsASec) << " requests received a second";
this->bitsLibrary->writeToLog(logstream.str(), "FIFOManager", "processRequestsSecondArray");
lastLoggedTime = std::time(NULL);
}
requestsASecondForAMinute[counter] = this->currentRequestsASecond;
cout << "ADDING REQUEST COUNTER VALUE " << this->currentRequestsASecond << " AT " << counter << endl;
if (counter < 59)
{
counter++;
}
else
{
counter = 0; //Only storing a minutes worth (60 secondS) so reset and start to overwrite
}
this->requestProcessMutex.unlock();
this_thread::sleep_for(chrono::seconds(1));
this->requestProcessMutex.lock();
this->currentRequestsASecond = 0;
this->requestProcessMutex.unlock();
}
}
processRequestsSecondArray
在数组中,每秒钟都睡1秒钟,每秒应将currentRequestsASecond
的值存储在当前第二个元素中,每分钟将其包装并通过数组覆盖。
ADDING REQUEST COUNTER VALUE
的输出始终指出它正在添加0
,但是currentRequestsASecond
直到睡眠发生后才重置为0,所以我做错了什么?
您的 processRequestsSecondArray()
函数看起来像一秒钟这样做:
-
从
sleep_for()
调用。 -
将
currentRequestsASecond
设置为零。 -
返回到
while
循环的顶部。 -
可能会计算并从数组中打印出平均值。
-
将
currentRequestsASecond
存储在requestsASecondForAMinute
的元素中。 -
再次致电
sleep_for()
。
看到问题了吗?
在sleep_for()
期间对currentRequestsASecond
进行的任何更改都会被擦除,并且永远不会放入数组中。只有当增量很幸运地碰巧得到请求并在很短的时间内抓住utex时,您才能在那里获得一个值, processRequestsSecondArray()
可以解锁互惠件,检查getApplicationStatus()
,然后立即锁定互惠符。看来您需要重新排列一些逻辑。
- 为什么将 1 添加到 numeric_limits<float>::min() 返回 1?
- 在先前调用 string::find 后添加内存分配和内存集会导致它返回 npos.为什么?
- 将新元素添加到列表中,并返回对该元素的引用?
- 编写一个函数,在开始和结束处添加括号,使所有括号匹配并返回
- 在下面函数的返回中添加 const 限定符的重要性是什么?
- 想要以最新的添加节点完整返回树节点的根
- 如何在链表前面添加和返回节点
- 强制实施调用函数应向被调用函数返回的值添加常量的规则
- 在函数返回时,清除了添加到一对int和字符串向量的矢量中的元素
- 为什么我的重载运算符+在向自身添加变量时会在返回时使"this"未初始化?
- C++Arduino:从hashmap添加和获取值会返回垃圾值
- 为什么 std::cout 在我的输出中添加返回或换行符
- 计算每秒添加到队列中添加的请求数 - 始终返回为零
- 在添加CUDA时返回错误的数字
- 为什么我不能通过CPP返回将char*添加到char*中
- 为什么在添加整数时,STD :: String返回字符串的尾巴
- 当我需要添加一个无用的返回语句时,C++约定是什么
- 为什么对象属性的值在 c++ 中将其指针添加到映射后返回零
- 我需要为返回容器副本的函数添加锁吗
- 如何返回 boost::fusion::vector<x,y,z> 元素以添加到 std::array<boost::fusion::vector<x,y,z>>?