阅读:1522回复:4
在驱动中使用线程,不停死机,郁闷中,求解!
在驱动中自己创建了一个线程,但是在结束线程时,蓝屏。并且提示如下:
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); 各位朋友,帮忙看看 |
|
沙发#
发布于:2007-05-17 12:03
自己顶一下
创建线程是不是要在driverentry中进行,那device_extension从initialdata结构中获取啊? |
|
板凳#
发布于:2007-07-16 19:20
不能用函数来中止线程的方式来杀的,而是要用一个标志来通知系统线程,让系统线程自己从循环中return出来
|
|
|
地板#
发布于:2007-07-20 09:05
那么就是这样的线程不能在外部结束,而只能在内部退出?
在线程内部可以安排一个开关在外部,内部在每次循环的同时检查该开关,如果是开,则继续,如果是关,就结束内部循环而退出,而在外部,则可以对该开关实行控制 |
|
地下室#
发布于:2007-07-20 10:40
用户被禁言,该主题自动屏蔽! |
|