dingshine
驱动小牛
驱动小牛
  • 注册日期2002-04-12
  • 最后登录2007-12-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1209回复:6

应用层怎么样处理异步中断

楼主#
更多 发布于:2002-05-28 11:05
我的应用层等待中断的程序是这样的:

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()里处理键盘事件了,请问该怎么解决这个问题?

最新喜欢:

flyfoxflyfox
驱动,俺不懂,有没有人管啊?
dingshine
驱动小牛
驱动小牛
  • 注册日期2002-04-12
  • 最后登录2007-12-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-05-31 13:44
能用hEVENT做到同步吗?怎么做呢?我没有思路。
驱动,俺不懂,有没有人管啊?
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-05-30 21:24
hEvent事件应该是你用来同Driver通信的事件,也就是说你自己写的驱动,当然你可通过hEvent来同步,而不需要getch这样的应用层函数。
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
dingshine
驱动小牛
驱动小牛
  • 注册日期2002-04-12
  • 最后登录2007-12-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-05-30 11:25
就是加了这一句WaitForSingleObject(hThread,INFINITE);中断也被我的卡独占了,也不可能在中断服务程序里对键盘进行操作了?
我想问问,由于异步中断的原因,如果没getch()这个函数中断是不会来的,那么隐藏在这个函数后面的是什么呢?
驱动,俺不懂,有没有人管啊?
dingshine
驱动小牛
驱动小牛
  • 注册日期2002-04-12
  • 最后登录2007-12-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-05-28 13:35
main()什么时候exit了呢?
驱动,俺不懂,有没有人管啊?
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2002-05-28 13:27
main都exit了,thread安在呼?
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
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;
}
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
游客

返回顶部