fusion/common/workqueue/workqueue.c

68 lines
1.6 KiB
C
Raw Permalink Normal View History

2025-08-05 07:53:44 +00:00
/*************************************************
File name : workqueue.h
Module :
Author : amir
Version : 0.1
Created on : 2022-02-07
Description :
Data structure and function definitions required by the socket interface
Modify History:
1. Date: Author: Modification:
*************************************************/
#include "threadpool.h"
#include "workqueue.h"
#include "hlog.h"
workqueue *workqueue_init(uint32_t max_cnt){
workqueue *wq = threadpool_create(max_cnt);
assert(wq);
return wq;
}
void workqueue_deinit(workqueue *wq){
if (wq){
threadpool_dump(wq);
threadpool_destroy(wq);
}
}
uint32_t workqueue_add(workqueue *wq, thread_routine routine, kpacket *packet){
return threadpool_add(wq, routine, packet );
}
static void *workqueue_test_handler(void *param){
kpacket *packet = (kpacket *)param;
hlogi("%s V:%u", __func__, *((int32_t *) packet->tlv.V));
return NULL;
};
void workqueue_test()
{
hlogi("%s start", __func__);
workqueue *wq = workqueue_init(5);
uint32_t i;
for(i=0; i<1000000;i++){
kpacket *packet = kpacket(1, 10);
hlogi("%s i:%u packet:%p", __func__, i, packet);
if (!packet){
hloge("%s i:%u packet:%p", __func__, i, packet);
hv_usleep(1000);
continue;
}
*((int32_t *) packet->tlv.V) = i;
workqueue_add(wq, workqueue_test_handler, packet);
kpacket_dec(packet);
}
workqueue_deinit(wq);
hlogi("%s stop", __func__);
}
void workqueue_dump(workqueue *wq)
{
threadpool_dump(wq);
}