本论坛为只读模式,仅供查阅,不能注册新用户,不能发帖/回帖,有问题可发邮件 xikug.xp (^) gmail.com
查看: 2104|回复: 0

内核线程封转 [复制链接]

Rank: 1

发表于 2012-3-30 09:50:21 |显示全部楼层
做了6年的应用开发,现在项目需要,刚转入内核开发,诸多不习惯,很大一个原因是没有很好用的基础库。
抛砖引玉,各位大牛能否贡献一点基础库代码?比如类似stl中的几个容器,比如好用的map,set啥的。

附件是我参照应用层线程类的封转制作的内核版本。提供线程测活,消息的投递和发送,以及低精度定时器等。

接口(标注使用顺序)如下:

//模块初始化
BOOLEAN kThread_InitLib();  //step:1
void kThread_UnitLib();//step:-3

//构建线程模板,相当于生成一个线程类 //step:2
HKTHREAD_CLASS kThread_CreateClass( fnInit_T fnInit
                                                 ,fnUninit_T fnUninit
                                                 ,fnOnIdle_T fnOnIdle
                                                 ,fnOnTimer_T fnOnTimer
                                                 ,fnOnCommand_T fnOnCommand
                                                 ,fnOnFreeCommand_T fnOnFreeCommand
                                                 ,ULONG        nPrivateDataSize        //私有存储区
                                                 ,POOL_TYPE PoolType);                //存储区分配类型:同时影响kThread_Create 的调用IRQL

//销毁线程类
void kThread_DestroyClass(HKTHREAD_CLASS hThreadClass);//step:-2

//创建一个线程类实例,允许携带一个私有数据:注意私有数据分配的类型是Pagedxxx,则IRQL <= APC_LEVEL
BOOLEAN kThread_Create( HKTHREAD_CLASS hThreadClass, ULONG nFlag, HKTHREAD* hThread, PVOID pContent);//step:3

//销毁线程,线程对象本身占用的存储空间
void kThread_Destroy(HKTHREAD hThread, BOOLEAN bForceExitRun, PLARGE_INTEGER llWaitTime, BOOLEAN bDelThreadObj);//step :-1
void kThread_DelThreadObj(HKTHREAD hThread);//step :-1.1,依赖kThread_Destroy最后一个参数的设置

//投递/发送命令
//IRQL <= DISPATCH_LEVEL
BOOLEAN kThread_PostCmd(HKTHREAD hThread, int nCmd, void*pLParam, void *pRParam, ULONG nCmdOption);  //完成初始化后正常使用
//IRQL <= APC_LEVEL
int kThread_SendCmd(HKTHREAD hThread, int nCmd, void*pLParam, void *pRParam, ULONG nCmdOption); //完成初始化后正常使用

//定时器
void kThread_RegistTimer(HKTHREAD hThread, int nTimerId,  ULONG nElaspeMs);//完成初始化后正常使用
void kThread_UnRegistTimer(HKTHREAD hThread, int nTimerId);//完成初始化后正常使用

//测试线程活动
void kThread_RegisteTestAlive(HKTHREAD hThread);//完成初始化后正常使用
void kThread_UnregisteTestAlive(HKTHREAD hThread);//完成初始化后正常使用

//获取数据
void* kThread_GetPrivateData(HKTHREAD hThread);//完成初始化后正常使用
void* kThread_GetContent(HKTHREAD hThread);//完成初始化后正常使用

KThread.h

3.19 KB, 下载次数: 334

KThread.c

37.29 KB, 下载次数: 384

KGlobalFun.h

1007 Bytes, 下载次数: 392

KGlobalFun.c

6.61 KB, 下载次数: 340

您需要登录后才可以回帖 登录 | 立即加入

Archiver|手机版|第8个男人 - 论坛为只读模式,仅供查阅

GMT+8, 2019-5-22 01:45 , Processed in 0.061599 second(s), 11 queries .

Design by pvo.cn

© 2011 Pvo Inc.

回顶部