阅读:887回复:2
18分 help me !!!!如何加快IO的速度???急急。。。
在WIN2000、XP下我要对某个端口要进行频繁的进行IO操作。例如以下在WIN98程序中的操作一样;
void Do(double &a,double &b); //要进行复杂的浮点数运算; void Run() //运行的主函数; { for(int i=0;i<10000;i++) { Do(a,b); _outb(0x300,a); _outb(0x301,b); } } 我要将这代码移到WIN2000、XP下运行时,就势必要用WDM中的端口 输出函数,从而转到如下方式。 应用程序----->动态库(调用DeviceIoControl来实现与驱动程序的 对话)----->驱动程序进行IO操作(用的是直接对端口的而不是用的 对寄存器的操作)。WRITE_PORT_UCHAR 我进行实验得到如下结果。 即在WIN98下运行的代码只用0.11秒而在WIN2000、XP下用驱动程序 的代码花了3秒才能完成,这个问题如何解决请高手指点一二。 多谢 我的Email:xiao_cao@msn.com cao-feng-@163.com |
|
沙发#
发布于:2002-08-01 21:41
绕过动态库,采用直接端口操作。具体实现在《WINDOWS NT/2000编程实践》(中国电力出版社)一书中有详细讲解。
|
|
板凳#
发布于:2002-08-01 22:44
1、a和b看样子象是字节啊,并非double
2、DO(a,b)占时多少 3、可采用下列方式: void Run() //运行的主函数; { for(int i=0;i<10000;i++) { Do(a,b); } } 在驱动程序里 for(int i=0;i<10000;i++) { _outb(0x300,a); _outb(0x301,b); } 即使用缓冲区,应用程序进行运算,计算一定数量后成批传送驱动程序,只要协调好,应该没问题 |
|