仅当最后一个CURL超过10秒时才执行CURL

时间:2013-05-04 10:05:36

标签: c curl time

我在智能电表守护程序中有这个程序来记录燃气消耗的计数器:

void http_post(const char *vzuuid) {

sprintf(url, "http://%s:%d/%s/data/%s.json?ts=%llu", vzserver, vzport, vzpath, vzuuid, unixtime());

CURL *curl;
CURLcode curl_res;

curl_global_init(CURL_GLOBAL_ALL);

curl = curl_easy_init();

if(curl) 
{
    FILE* devnull = NULL;
    devnull = fopen("/dev/null", "w+");

    curl_easy_setopt(curl, CURLOPT_USERAGENT, DAEMON_NAME " " DAEMON_VERSION ); 
    curl_easy_setopt(curl, CURLOPT_URL, url);
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "");

    curl_easy_setopt(curl, CURLOPT_WRITEDATA, devnull);

        if( (curl_res = curl_easy_perform(curl)) != CURLE_OK) {
        syslog(LOG_INFO, "HTTP_POST(): %s", curl_easy_strerror(curl_res) );
        }

    curl_easy_cleanup(curl);
    fclose ( devnull );

}

curl_global_cleanup();
}

我想在最后一次通话超过10年之前执行此操作。我想到了一个全局变量last_time来记住最后一个时间戳,并将它与if ... then构造的所有curl内容中的实际时间戳进行比较。为此,直接使用unixtime()应该缓冲在另一个变量current_time中,用于与last_time进行比较。

是的,有人可以帮帮我吗?我不习惯使用C ......

谢谢!

1 个答案:

答案 0 :(得分:0)

你的方法很好。你可以这样做:

#include <time.h>

void http_post(const char *vzuuid)
{ 
  static time_t last_time = 0;
  time_t cur_time;

  cur_time = time(NULL);
  if (cur_time - last_time < 10)
    return; /* nothing to do */

  last_time = cur_time;

  /* ... */
}

我不使用全局而是静态变量来保存上次请求的最后一次。