ke077
驱动牛犊
驱动牛犊
  • 注册日期2007-03-14
  • 最后登录2010-10-28
  • 粉丝1
  • 关注0
  • 积分362分
  • 威望134点
  • 贡献值0点
  • 好评度72点
  • 原创分0分
  • 专家分0分
阅读:1522回复:4

在驱动中使用线程,不停死机,郁闷中,求解!

楼主#
更多 发布于:2007-05-16 16:38
在驱动中自己创建了一个线程,但是在结束线程时,蓝屏。并且提示如下:
An executive worker thread is being terminated without having gone through the worker thread rundown code;
work items queued to the Ex worker queue must not terminate their threads,A stack trace should indicate the culprit.

创建线程代码:
PDEVICE_EXTENSION pdx;
KeInitializeSpinLock( &pdx->lkIrpQueue );
InitializeListHead( &pdx->IrpQueueListHead );        
KeInitializeSemaphore( &pdx->semIrpQueue,   0, MAXLONG);
status = PsCreateSystemThread( &hThread, (ACCESS_MASK)0, NULL,                 (HANDLE)0, NULL, WorkerThreadMain,  pdx );  
结束线程:
KeReleaseSemaphore( &pDE->semIrpQueue, 0,1, TRUE );
KeWaitForSingleObject(&pDE->pThreadObj, Executive, KernelMode, FALSE, NULL );
ObDereferenceObject( &pDE->pThreadObj );    
PsTerminateSystemThread(STATUS_SUCCESS);

各位朋友,帮忙看看
ke077
驱动牛犊
驱动牛犊
  • 注册日期2007-03-14
  • 最后登录2010-10-28
  • 粉丝1
  • 关注0
  • 积分362分
  • 威望134点
  • 贡献值0点
  • 好评度72点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-05-17 12:03
自己顶一下
创建线程是不是要在driverentry中进行,那device_extension从initialdata结构中获取啊?
zzq191
驱动中牛
驱动中牛
  • 注册日期2001-08-09
  • 最后登录2018-05-29
  • 粉丝17
  • 关注0
  • 积分1041分
  • 威望716点
  • 贡献值0点
  • 好评度318点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2007-07-16 19:20
不能用函数来中止线程的方式来杀的,而是要用一个标志来通知系统线程,让系统线程自己从循环中return出来
QQ:416331891,承接windows下应用和驱动的开发,雅虎通:zzq191, Email:zzq191@21cn.com
wy_laser
驱动牛犊
驱动牛犊
  • 注册日期2007-05-31
  • 最后登录2007-07-26
  • 粉丝0
  • 关注0
  • 积分240分
  • 威望25点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-07-20 09:05
那么就是这样的线程不能在外部结束,而只能在内部退出?

在线程内部可以安排一个开关在外部,内部在每次循环的同时检查该开关,如果是开,则继续,如果是关,就结束内部循环而退出,而在外部,则可以对该开关实行控制
gutian98
禁止发言
禁止发言
  • 注册日期2003-01-12
  • 最后登录2016-12-11
  • 粉丝4
  • 关注2
  • 积分760分
  • 威望8026点
  • 贡献值1点
  • 好评度364点
  • 原创分0分
  • 专家分21分
  • 金点子奖
  • 社区居民
地下室#
发布于:2007-07-20 10:40
用户被禁言,该主题自动屏蔽!
游客

返回顶部