56 lines
1.1 KiB
C
56 lines
1.1 KiB
C
#ifndef mysignal_h__
|
|
#define mysignal_h__
|
|
|
|
#include "pthread.h"
|
|
#include "stdint.h"
|
|
#include <semaphore.h>
|
|
|
|
|
|
#define emit
|
|
#define signal void
|
|
#define slot void
|
|
|
|
|
|
typedef struct {
|
|
void* next;
|
|
void (*func)(void* par);
|
|
// size_t pars[]; // 这里保存函数的参数实体
|
|
}slot_list_with_pars;
|
|
|
|
typedef struct {
|
|
pthread_mutex_t lock; /* 互斥锁定义 */
|
|
sem_t sem;
|
|
pthread_t *tid;
|
|
slot_list_with_pars *slot_head;
|
|
} mythread_t;
|
|
|
|
typedef struct {
|
|
void* next;
|
|
void (*func)(void* par);
|
|
void* signal_func;
|
|
void* slot_obj;
|
|
mythread_t* thread;
|
|
}slot_list;
|
|
|
|
typedef struct {
|
|
pthread_mutex_t lock; /* 互斥锁定义 */
|
|
slot_list* slot_head;
|
|
}__SIG_OBJ;
|
|
|
|
#define SIG_OBJ __SIG_OBJ __sig_obj
|
|
|
|
|
|
void send_slot_fun(mythread_t* self, slot_list_with_pars* slot_p);
|
|
mythread_t* sigthread_init(const char* name);
|
|
|
|
void _connect(void* sig_obj, void* sig_fun, mythread_t* thread, void* slot_obj, const char* slot_fun);
|
|
|
|
// 这个函数在signal_tmp.c里实现
|
|
void* signal_find_slot_func(const char* name);
|
|
|
|
#define connect(sig_obj, sig_fun, thread, slot_obj, slot_fun) {\
|
|
(void)slot_fun;\
|
|
_connect(sig_obj, sig_fun, thread, slot_obj, #slot_fun);}\
|
|
|
|
#endif
|