如何缓解过于频繁调用的函数?
How to mitigate a function that gets called too often?
我有这个函数,每秒调用 5-6 次,执行一些内部处理,然后向外部系统发送命令。外部系统不适合以这种速度传入的处理命令。我怎样才能使函数每秒只处理一次(或其他一些可配置的数量),而不管函数被调用的频率如何?
我尝试使用锁,但这只会导致后续函数调用等待前一个函数完成。我觉得我想多了。
也许像下面的例子?请注意,在此程序中 MyFunction()
每秒被调用多次(数千次?),但它仅(假装)每秒发送一次数据。
#include <chrono>
#include <iostream>
typedef std::chrono::steady_clock::time_point my_time_point_type;
void MyFunction()
{
static my_time_point_type previousSendTime;
const my_time_point_type now = std::chrono::steady_clock::now();
const long long nanosSinceLastSend = (now-previousSendTime).count();
if (nanosSinceLastSend > 1*1000000000LL)
{
std::cout << "SEND DATA NOW!" << std::endl;
previousSendTime = now;
}
}
int main(int argv, char ** argc)
{
while(1)
{
MyFunction();
}
}
我有这个函数,每秒调用 5-6 次,执行一些内部处理,然后向外部系统发送命令。外部系统不适合以这种速度传入的处理命令。我怎样才能使函数每秒只处理一次(或其他一些可配置的数量),而不管函数被调用的频率如何?
我尝试使用锁,但这只会导致后续函数调用等待前一个函数完成。我觉得我想多了。
也许像下面的例子?请注意,在此程序中 MyFunction()
每秒被调用多次(数千次?),但它仅(假装)每秒发送一次数据。
#include <chrono>
#include <iostream>
typedef std::chrono::steady_clock::time_point my_time_point_type;
void MyFunction()
{
static my_time_point_type previousSendTime;
const my_time_point_type now = std::chrono::steady_clock::now();
const long long nanosSinceLastSend = (now-previousSendTime).count();
if (nanosSinceLastSend > 1*1000000000LL)
{
std::cout << "SEND DATA NOW!" << std::endl;
previousSendTime = now;
}
}
int main(int argv, char ** argc)
{
while(1)
{
MyFunction();
}
}