C 輕量級 訊號與槽

2021-08-02 16:19:10 字數 3824 閱讀 1532

qt的訊號與槽

一下是用c實現的簡易的訊號與槽。指標用的比較多。

廢話不多說,上**

#ifndef _******_signal_solts_h_

#define _******_signal_solts_h_

#include "string.h"

typedef void (*******_signal)(void *signal, void *parg);

typedef void (*******_solts) (void *parg);

#define ******_solts_t(funcname) void(funcname)(void *parg)

#define ******_emit(signal, arg) if (signal != null)signal(&signal, arg)

#define ******_signal_solts_max_solts 10 //乙個訊號最多連線槽的數量

#define ******_signal_solts_max_signal 10 //訊號最多數量

errorstatus ******signalsolts_connect(******_signal *signal,******_solts solts);

#endif

/*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

**** @ file name --> ******signalsolts.c

* @ author --> by@ liuyu

* @ version --> v1.0

* @ date --> 2017 - 06 - 15

* @ brief --> 輕量級的訊號與槽

* @ --> 乙個訊號對應多個槽,查表呼叫

******

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

****

** file update

* @ version --> v1.0

* @ author -->

* @ date -->

* @ revise -->

* @ --> **

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

***/

#include "******signalsolts.h"

#include

//訊號結構

typedef struct

******_signal_t;

//訊號表結構

typedef struct

******_signal_solts_handle_t;

******_signal_solts_handle_t handle =

;static void ******signalsolts_signal(void *signal, void *parg)}}

}}/*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

******

* @函式說明: 連線訊號與槽

* @輸入引數: ******_signal *singnal 訊號的指標(指標的指標)

******_solts solts 槽

* @輸出引數: 無

* @返回引數: errorstatus

* @修改記錄: ----

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

******/

errorstatus ******signalsolts_connect(******_signal *signal, ******_solts solts)

uint8_t i;

if (handle.signalcount > ******_signal_solts_max_signal) //錯誤

for (i = 0; i < handle.signalcount; i++) //查詢是否是同乙個訊號

if (handle.signaltable[i].soltscount == ******_signal_solts_max_solts) //滿了

else}}

if (handle.signalcount == ******_signal_solts_max_signal) //滿了

else

}/*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

******

* @函式說明: 斷開訊號槽

* @輸入引數: ******_signal *singnal 訊號的指標(指標的指標)

******_solts solts 槽

* @輸出引數: 無

* @返回引數: errorstatus

* @修改記錄: ----

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

*****

******/

errorstatus ******signalsolts_disconnect(******_signal *signal, ******_solts solts)

uint8_t i, j;

for (i = 0; i < handle.signalcount; i++) //查詢是否是同乙個訊號

}if (handle.signaltable[i].soltscount == 0) //此訊號沒有連線槽了

return success;}}

return error;

}

uClibc(輕量級C庫)

參考 http www.uclibc.org gnu的glibc是乙個非常寵大而完整的庫,至少對於嵌入式系統來說,其體積顯得過於大了一些。uclibc的提出較好的解決了這樣乙個問題。uclibc盡可能的相容glibc,大多數應用程式可以在很小或完全不修改的情況下就可能使用uclibc替代glibc。...

C 資訊槽 訊號槽

訊號槽作用 1 可以將事件源和訂閱處理者分開 2 降低耦合性,事件源只需要向外界暴露最少的資訊,內部改變不影響外部行為 3.降低 複雜性,將事件不同的處理 分散到各個訂閱者內部。使用資訊槽 1 包含標頭檔案,include sigslot.h using namespace sigslot 2 在事...

(原創) C 輕量級AOP框架

c 中開源的aop框架aspectc 需要單獨編譯才能將切面的 織入到核心邏輯 中,感覺使用起來不方便,不能滿足快速開發要求。我希望只要實現方法攔截即可,能織入before 和after 操作就行,不追求動態織入。思路是這樣的,通過乙個包裝類,裡面定義before 和after 方法,和 運算子過載...