68 lines
1.6 KiB
C
68 lines
1.6 KiB
C
|
/*************************************************
|
||
|
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);
|
||
|
}
|
||
|
|
||
|
|