C编程 - 每隔n分钟进行一次火灾处理

时间:2015-11-08 17:31:33

标签: c events struct timer

我正在开展一个大型项目,我需要每隔n分钟监控一个结构的过程。

结构的每个实例都可能拥有自己的时间长度,以便进程能够完成它将要执行的操作。

举个例子,让我说我监控客户端连接,struct client。

当客户端被实例化时,我希望合并一个方法,如:

void add_Client_Monitor (client_t * client, int seconds)

然后,add_Client_Monitor应该能够创建一个定时器事件,该事件将在规定的秒数之后触发,并且还作用于客户端结构,即通过如下方法:

void timer_Update_Client(client_t * client)

由于

1 个答案:

答案 0 :(得分:1)

你可以使用一个线程池(就像这些github.com/Pithikos/C-Thread-Pool或这些一个github.com/mbrossard/threadpool)。 在add_Client_Monitor函数中,您可以将作业传递给具有要运行的特定函数的线程池。 举个简单的例子:

#include "thpool.h"

typedef struct monitor_func_args {
    client_t* client;
    int seconds;
} monitor_func_args;

void* client_monitor_func(void* args){
    struct timeval timeout;
    timeout.tv_sec = ((monitor_func_args*) args)->seconds;
    timeout.tv_usec = 0;
    while(1) {
        // Do your stuff
        select (0 ,NULL, NULL, NULL, &timeout); // "sleep" 
    }
}

void add_client_monitor (threadpool pool, client_t * client, int seconds)   {
    monitor_func_args* args = (monitor_func_args*) malloc(sizeof(monitor_func_args));
    args->client = client;
    args->seconds = seconds;
    thpool_add_work(pool, client_monitor_func, (void*) args);
}


int main(){
    threadpool thpool = thpool_init(10); // pool with 10 threads

    client_t* client; // get it from somewhere
    int timeout // get it from somewhere

    add_client_monitor(thpool, &client, timeout) 

    thpool_destroy(thpool);
    return 0;
}

我没有看过这些线程池实现的整个代码,但它们似乎是正确的。 当然,还有很多其他的可以使用。