阅读:1209回复:6
应用层怎么样处理异步中断
我的应用层等待中断的程序是这样的:
DWORD WINAPI ThreadProc(PVOID junkola) { while(TRUE) { WaitForSingleObject(hEvent,INFINITE); puts(\"Event Happened\"); Interrupt_service(); } return 0; } int __cdecl main() { ........ hEvent=CreateEvent(NULL,FALSE,FALSE,NULL); if(!DeviceIoControl(hDevice,SEND_HEVENT,&hEvent,sizeof(hEvent),NULL,0,&junk,NULL)) { printf(\"Error %d in SEND_HEVENT call\\n \",GetLastError()); CloseHandle(hEvent); pci_close(hDevice); } HANDLE hThread=CreateThread(NULL,0,ThreadProc,NULL,0,&junk); printf(\"press any key to exit....\\n\"); getch(); CloseHandle(hEvent); pci_close(hDevice); return 0; } 现在的问题是:我的中断的到来是在printf(\"press any key to exit....\\n\");后面,也就是说,我一按任意键就要退出。 这样我就不能在Interrupt_service()里处理键盘事件了,请问该怎么解决这个问题? |
|
最新喜欢:![]()
|
沙发#
发布于:2002-05-31 13:44
能用hEVENT做到同步吗?怎么做呢?我没有思路。
|
|
|
板凳#
发布于:2002-05-30 21:24
hEvent事件应该是你用来同Driver通信的事件,也就是说你自己写的驱动,当然你可通过hEvent来同步,而不需要getch这样的应用层函数。
|
|
|
地板#
发布于:2002-05-30 11:25
就是加了这一句WaitForSingleObject(hThread,INFINITE);中断也被我的卡独占了,也不可能在中断服务程序里对键盘进行操作了?
我想问问,由于异步中断的原因,如果没getch()这个函数中断是不会来的,那么隐藏在这个函数后面的是什么呢? |
|
|
地下室#
发布于:2002-05-28 13:35
main()什么时候exit了呢?
|
|
|
5楼#
发布于:2002-05-28 13:27
main都exit了,thread安在呼?
|
|
6楼#
发布于:2002-05-28 13:07
为什么要将程序退出,你可等待ThreadProc线程完成后在退出程序
使用如下方式 DWORD WINAPI ThreadProc(PVOID junkola) { while(TRUE) { WaitForSingleObject(hEvent,INFINITE); puts(\"Event Happened\"); Interrupt_service(); } return 0; } int __cdecl main() { ........ hEvent=CreateEvent(NULL,FALSE,FALSE,NULL); if(!DeviceIoControl(hDevice,SEND_HEVENT,&hEvent,sizeof(hEvent),NULL,0,&junk,NULL)) { printf(\"Error %d in SEND_HEVENT call\\n \",GetLastError()); CloseHandle(hEvent); pci_close(hDevice); } HANDLE hThread=CreateThread(NULL,0,ThreadProc,NULL,0,&junk); WaitForSingleObject(hThread,INFINITE); CloseHandle(hEvent); pci_close(hDevice); return 0; } |
|
|