mirror of
https://github.com/tribufu/sdk-cpp
synced 2025-06-16 18:54:18 +00:00
Add libhv and test http client
This commit is contained in:
69
vendor/libhv/include/hv/hproc.h
vendored
Normal file
69
vendor/libhv/include/hv/hproc.h
vendored
Normal file
@ -0,0 +1,69 @@
|
||||
#ifndef HV_PROC_H_
|
||||
#define HV_PROC_H_
|
||||
|
||||
#include "hplatform.h"
|
||||
|
||||
typedef struct proc_ctx_s {
|
||||
pid_t pid; // tid in Windows
|
||||
time_t start_time;
|
||||
int spawn_cnt;
|
||||
procedure_t init;
|
||||
void* init_userdata;
|
||||
procedure_t proc;
|
||||
void* proc_userdata;
|
||||
procedure_t exit;
|
||||
void* exit_userdata;
|
||||
} proc_ctx_t;
|
||||
|
||||
static inline void hproc_run(proc_ctx_t* ctx) {
|
||||
if (ctx->init) {
|
||||
ctx->init(ctx->init_userdata);
|
||||
}
|
||||
if (ctx->proc) {
|
||||
ctx->proc(ctx->proc_userdata);
|
||||
}
|
||||
if (ctx->exit) {
|
||||
ctx->exit(ctx->exit_userdata);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef OS_UNIX
|
||||
// unix use multi-processes
|
||||
static inline int hproc_spawn(proc_ctx_t* ctx) {
|
||||
++ctx->spawn_cnt;
|
||||
ctx->start_time = time(NULL);
|
||||
pid_t pid = fork();
|
||||
if (pid < 0) {
|
||||
perror("fork");
|
||||
return -1;
|
||||
} else if (pid == 0) {
|
||||
// child process
|
||||
ctx->pid = getpid();
|
||||
hproc_run(ctx);
|
||||
exit(0);
|
||||
} else if (pid > 0) {
|
||||
// parent process
|
||||
ctx->pid = pid;
|
||||
}
|
||||
return pid;
|
||||
}
|
||||
#elif defined(OS_WIN)
|
||||
// win32 use multi-threads
|
||||
static void win_thread(void* userdata) {
|
||||
proc_ctx_t* ctx = (proc_ctx_t*)userdata;
|
||||
ctx->pid = GetCurrentThreadId(); // tid in Windows
|
||||
hproc_run(ctx);
|
||||
}
|
||||
static inline int hproc_spawn(proc_ctx_t* ctx) {
|
||||
++ctx->spawn_cnt;
|
||||
ctx->start_time = time(NULL);
|
||||
HANDLE h = (HANDLE)_beginthread(win_thread, 0, ctx);
|
||||
if (h == NULL) {
|
||||
return -1;
|
||||
}
|
||||
ctx->pid = GetThreadId(h); // tid in Windows
|
||||
return ctx->pid;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // HV_PROC_H_
|
Reference in New Issue
Block a user