日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

C语言工作笔记-函数指针的使用(补充C回调系统)

發布時間:2025/3/15 windows 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言工作笔记-函数指针的使用(补充C回调系统) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本篇博文是基于:

https://blog.csdn.net/qq78442761/article/details/89202337

這篇博文的代碼!

?

這里主要是做兩個補充!

1. 模塊一想加入一個處理,輸出I am fine, fuck you1!

2. 只執行write模塊!

?

這里修改上次的代碼!

程序運行截圖如下:

程序結構如下:

源碼如下:

FirstModule.h

#pragma once #include "stdef.h" #include "moduleAdmin.h"int InitFirstModule();

moduleAdmin.h

#pragma once#include "stdef.h"typedef enum tagMODULE_SETS //SETS表示這是枚舉集合 {MY_ALL_MODULE = 0,MY_READ_MODULE = 1,MY_WRITE_MODULE = 2,MY_INVALID_MODULE = 0xffff}MODULE_SETS_E; //E表示enumtypedef int(*pProcFun)();typedef struct tagMoudleData //一般帶有管理的結構體在C語言中都是tagXXXX {int iModule; //每個模塊唯一IDpProcFun pFun; }MOUDLE_DATA_S; //一般在結構體結尾都加S,代表struct;int RegisterProc(int iModule, pProcFun pFun); int ExcuteAllModule(); int ExcuteWriteModule();

SecondModule.h

#pragma once#include "stdef.h" #include "moduleAdmin.h"int InitSecondModule();

stdef.h

#pragma once#include <stdio.h> #include <Windows.h>#define OK 0 #define ERR -1

FirstModule.cpp

#include "FirstModule.h"//模塊一想加一個處理,輸出I am fine, fuck you!int iFlag = 2;int FirstModuleEx(){printf("I am fine, fuck you!\n");return OK; }int FirstModuleProc(){printf("Hello I am First Module\n");if(iFlag <= 0){FirstModuleEx();}iFlag--;return OK; }int InitFirstModule(){RegisterProc(MY_WRITE_MODULE, FirstModuleProc);return OK; }

main.cpp

#include "stdef.h" #include "FirstModule.h" #include "SecondModule.h"DWORD WINAPI MyThread(){while(1){printf(">");ExcuteAllModule();Sleep(1000);} }DWORD WINAPI MyThreadEx(){while(1){printf("#");ExcuteWriteModule();Sleep(1000);} }int TestFunPtr(){InitFirstModule();HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)MyThread, NULL, 0, NULL);HANDLE hThreadEx = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)MyThreadEx, NULL, 0, NULL);Sleep(3000);InitSecondModule();Sleep(3000);TerminateThread(hThread, 0);CloseHandle(hThread);TerminateThread(hThreadEx, 0);CloseHandle(hThreadEx);return OK; }int main(int argc, int *argv[]){TestFunPtr();getchar();return 0; }

moduleAdmin.cpp

#include "moduleAdmin.h"#define MAX_PROC 100int g_iProCnt = 0; //全局的前面加一個g MOUDLE_DATA_S FunList[MAX_PROC] = {0};int RegisterProc(int iModule, pProcFun pFun){if(g_iProCnt == MAX_PROC){return ERR;}FunList[g_iProCnt].iModule = iModule;FunList[g_iProCnt].pFun = pFun;g_iProCnt++;return OK; }//調用注冊的函數 int ExcuteAllModule(){for(int i = 0; i < g_iProCnt; i++){FunList[i].pFun();}return OK; }//只運行寫模塊 int ExcuteWriteModule(){for(int i = 0; i < g_iProCnt; i++){if(FunList[i].iModule == MY_WRITE_MODULE){FunList[i].pFun();}}return OK; }

SecondModule.cpp

#include "SecondModule.h"int SecondModuleProc(){printf("Hello I am Second Module\n");return OK; }int InitSecondModule(){RegisterProc(MY_READ_MODULE, SecondModuleProc);return OK; }

源碼打包下載地址:

https://github.com/fengfanchen/CAndCPP/tree/master/CfunctionPtrAndCallBack%20supplement

總結

以上是生活随笔為你收集整理的C语言工作笔记-函数指针的使用(补充C回调系统)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。