chore: 删除旧的 myTask.cpp(已替换为 myTask.c)

This commit is contained in:
ypc 2026-07-07 15:01:20 +08:00
parent 2a692cada5
commit aa97f72500
1 changed files with 0 additions and 302 deletions

View File

@ -1,302 +0,0 @@
/**
* @file myTask.cpp
* @brief Task framework implementation (C++ internal)
*/
#include <unistd.h>
#include "myTask.h"
#include "myBase.h"
#include <pthread.h>
#include <map>
#include <string>
#include <sys/time.h>
struct stru_task_timer
{
timer_func_cb cb;
void *arg;
uint32_t ms;
int flags;
int active;
uint64_t next_us;
std::string name;
};
LOCAL std::map<stru_task_timer_t, int> *g_timer_map = NULL;
LOCAL pthread_t g_timer_thread;
LOCAL int g_timer_running = 0;
LOCAL pthread_mutex_t g_timer_lock = PTHREAD_MUTEX_INITIALIZER;
LOCAL uint64_t now_us(void)
{
struct timeval tv; gettimeofday(&tv, NULL);
return (uint64_t)tv.tv_sec * 1000000 + (uint64_t)tv.tv_usec;
}
LOCAL void *timer_worker(void *arg)
{
(void)arg;
while (g_timer_running)
{
pthread_mutex_lock(&g_timer_lock);
uint64_t now = now_us();
for (auto &kv : *g_timer_map)
{
stru_task_timer_t pt = kv.first;
if (!pt->active || now < pt->next_us) continue;
int ret = pt->cb(pt->arg);
if (ret != 0 || pt->flags == 0) pt->active = 0;
else pt->next_us = now + (uint64_t)pt->ms * 1000;
}
pthread_mutex_unlock(&g_timer_lock);
usleep(10000);
}
return NULL;
}
LOCAL void timer_ensure_init(void)
{
if (g_timer_map) return;
g_timer_map = new std::map<stru_task_timer_t, int>();
g_timer_running = 1;
pthread_create(&g_timer_thread, NULL, timer_worker, NULL);
}
struct stru_task_event
{
uint32_t bits; pthread_mutex_t lock; pthread_cond_t cond; std::string name;
};
struct stru_task_msg_queue
{
uint8_t *buf; uint32_t msg_size, msg_num, head, tail, count;
pthread_mutex_t lock; pthread_cond_t cond_read, cond_write; std::string name;
};
/* ================================================================
* Exported API (extern "C" C linkage)
* ================================================================ */
extern "C" {
stru_task_timer_t task_timer_create(const char *name, timer_func_cb cb,
void *arg, uint32_t ms, int flags)
{
timer_ensure_init();
stru_task_timer_t pt = new stru_task_timer();
if (!pt) return NULL;
pt->cb = cb; pt->arg = arg; pt->ms = ms; pt->flags = flags;
pt->active = 0; pt->next_us = 0; pt->name = name ? name : "?";
pthread_mutex_lock(&g_timer_lock);
(*g_timer_map)[pt] = 1;
pthread_mutex_unlock(&g_timer_lock);
return pt;
}
int task_timer_start(stru_task_timer_t pt)
{
if (!pt) return -1;
pthread_mutex_lock(&g_timer_lock);
pt->next_us = now_us() + (uint64_t)pt->ms * 1000;
pt->active = 1;
pthread_mutex_unlock(&g_timer_lock);
return 0;
}
int task_timer_stop(stru_task_timer_t pt)
{
if (!pt) return -1;
pthread_mutex_lock(&g_timer_lock); pt->active = 0; pthread_mutex_unlock(&g_timer_lock);
return 0;
}
int task_timer_restart(stru_task_timer_t pt, uint32_t ms)
{
if (!pt) return -1;
pthread_mutex_lock(&g_timer_lock);
pt->ms = ms; pt->next_us = now_us() + (uint64_t)ms * 1000; pt->active = 1;
pthread_mutex_unlock(&g_timer_lock);
return 0;
}
int task_timer_destroy(stru_task_timer_t pt)
{
if (!pt) return -1;
pthread_mutex_lock(&g_timer_lock); g_timer_map->erase(pt); pthread_mutex_unlock(&g_timer_lock);
delete pt;
return 0;
}
int task_timer_is_active(stru_task_timer_t pt)
{
if (!pt) return 0;
pthread_mutex_lock(&g_timer_lock);
int a = pt->active; pthread_mutex_unlock(&g_timer_lock);
return a;
}
stru_task_event_t task_event_create(const char *name)
{
stru_task_event_t pe = new stru_task_event();
if (!pe) return NULL;
pe->bits = 0;
pe->lock = PTHREAD_MUTEX_INITIALIZER;
pe->cond = PTHREAD_COND_INITIALIZER;
pe->name = name ? name : "?";
return pe;
}
int task_event_destroy(stru_task_event_t pe)
{
if (!pe) return -1;
pthread_mutex_destroy(&pe->lock); pthread_cond_destroy(&pe->cond); delete pe;
return 0;
}
int task_event_send(stru_task_event_t pe, uint32_t bits)
{
if (!pe) return -1;
pthread_mutex_lock(&pe->lock); pe->bits |= bits; pthread_cond_broadcast(&pe->cond); pthread_mutex_unlock(&pe->lock);
return 0;
}
int task_event_recv(stru_task_event_t pe, uint32_t set, uint32_t opt,
uint32_t timeout_ms, uint32_t *recved)
{
if (!pe || !recved) return -1;
pthread_mutex_lock(&pe->lock);
while (1)
{
uint32_t m = pe->bits & set;
if ((opt == 0 && m == set) || (opt == 1 && m != 0))
{ *recved = m; pe->bits &= ~set; pthread_mutex_unlock(&pe->lock); return 0; }
if (timeout_ms == 0) { pthread_cond_wait(&pe->cond, &pe->lock); }
else
{
struct timeval tv; gettimeofday(&tv, NULL);
struct timespec ts;
ts.tv_sec = tv.tv_sec + timeout_ms / 1000;
ts.tv_nsec = (tv.tv_usec + (timeout_ms % 1000) * 1000) * 1000;
if (ts.tv_nsec >= 1000000000L) { ts.tv_sec++; ts.tv_nsec -= 1000000000L; }
if (pthread_cond_timedwait(&pe->cond, &pe->lock, &ts) == ETIMEDOUT)
{ pthread_mutex_unlock(&pe->lock); return -1; }
}
}
}
int task_event_clear(stru_task_event_t pe, uint32_t bits)
{
if (!pe) return -1;
pthread_mutex_lock(&pe->lock); pe->bits &= ~bits; pthread_mutex_unlock(&pe->lock);
return 0;
}
uint32_t task_event_query(stru_task_event_t pe)
{
if (!pe) return 0;
pthread_mutex_lock(&pe->lock);
uint32_t b = pe->bits; pthread_mutex_unlock(&pe->lock);
return b;
}
stru_task_msg_queue_t task_msg_queue_create(const char *name,
uint32_t msg_size, uint32_t msg_num)
{
if (msg_size == 0 || msg_num == 0) return NULL;
stru_task_msg_queue_t pq = new stru_task_msg_queue();
if (!pq) return NULL;
pq->buf = (uint8_t *)malloc(msg_size * msg_num);
pq->msg_size = msg_size; pq->msg_num = msg_num;
pq->head = 0; pq->tail = 0; pq->count = 0;
pq->lock = PTHREAD_MUTEX_INITIALIZER;
pq->cond_read = PTHREAD_COND_INITIALIZER;
pq->cond_write = PTHREAD_COND_INITIALIZER;
pq->name = name ? name : "?";
return pq;
}
int task_msg_queue_destroy(stru_task_msg_queue_t pq)
{
if (!pq) return -1;
pthread_mutex_destroy(&pq->lock); pthread_cond_destroy(&pq->cond_read); pthread_cond_destroy(&pq->cond_write);
free(pq->buf); delete pq;
return 0;
}
int task_msg_queue_send(stru_task_msg_queue_t pq, const void *msg, uint32_t size)
{ return task_msg_queue_send_timeout(pq, msg, size, 0); }
int task_msg_queue_send_timeout(stru_task_msg_queue_t pq, const void *msg,
uint32_t size, uint32_t timeout_ms)
{
if (!pq || !msg || size > pq->msg_size) return -1;
pthread_mutex_lock(&pq->lock);
while (pq->count >= pq->msg_num)
{
if (timeout_ms == 0) pthread_cond_wait(&pq->cond_write, &pq->lock);
else {
struct timeval tv; gettimeofday(&tv, NULL);
struct timespec ts;
ts.tv_sec = tv.tv_sec + timeout_ms / 1000;
ts.tv_nsec = (tv.tv_usec + (timeout_ms % 1000) * 1000) * 1000;
if (ts.tv_nsec >= 1000000000L) { ts.tv_sec++; ts.tv_nsec -= 1000000000L; }
if (pthread_cond_timedwait(&pq->cond_write, &pq->lock, &ts) == ETIMEDOUT)
{ pthread_mutex_unlock(&pq->lock); return -1; }
}
}
memcpy(pq->buf + pq->head * pq->msg_size, msg, size);
pq->head = (pq->head + 1) % pq->msg_num; pq->count++;
pthread_cond_signal(&pq->cond_read); pthread_mutex_unlock(&pq->lock);
return 0;
}
int task_msg_queue_recv(stru_task_msg_queue_t pq, void *msg, uint32_t size,
uint32_t timeout_ms)
{
if (!pq || !msg) return -1;
pthread_mutex_lock(&pq->lock);
while (pq->count == 0)
{
if (timeout_ms == 0) pthread_cond_wait(&pq->cond_read, &pq->lock);
else {
struct timeval tv; gettimeofday(&tv, NULL);
struct timespec ts;
ts.tv_sec = tv.tv_sec + timeout_ms / 1000;
ts.tv_nsec = (tv.tv_usec + (timeout_ms % 1000) * 1000) * 1000;
if (ts.tv_nsec >= 1000000000L) { ts.tv_sec++; ts.tv_nsec -= 1000000000L; }
if (pthread_cond_timedwait(&pq->cond_read, &pq->lock, &ts) == ETIMEDOUT)
{ pthread_mutex_unlock(&pq->lock); return -1; }
}
}
memcpy(msg, pq->buf + pq->tail * pq->msg_size, (size < pq->msg_size) ? size : pq->msg_size);
pq->tail = (pq->tail + 1) % pq->msg_num; pq->count--;
pthread_cond_signal(&pq->cond_write); pthread_mutex_unlock(&pq->lock);
return 0;
}
int task_msg_queue_try_recv(stru_task_msg_queue_t pq, void *msg, uint32_t size)
{
if (!pq || !msg) return -1;
pthread_mutex_lock(&pq->lock);
if (pq->count == 0) { pthread_mutex_unlock(&pq->lock); return -1; }
memcpy(msg, pq->buf + pq->tail * pq->msg_size, (size < pq->msg_size) ? size : pq->msg_size);
pq->tail = (pq->tail + 1) % pq->msg_num; pq->count--;
pthread_cond_signal(&pq->cond_write); pthread_mutex_unlock(&pq->lock);
return 0;
}
uint32_t task_msg_queue_get_count(stru_task_msg_queue_t pq)
{
if (!pq) return 0;
pthread_mutex_lock(&pq->lock); uint32_t c = pq->count; pthread_mutex_unlock(&pq->lock);
return c;
}
uint32_t task_msg_queue_space(stru_task_msg_queue_t pq)
{
if (!pq) return 0;
pthread_mutex_lock(&pq->lock); uint32_t s = pq->msg_num - pq->count; pthread_mutex_unlock(&pq->lock);
return s;
}
} /* extern "C" */