mfc与驱动通信的有关问题(欢迎大家参与讨论)

mfc与驱动通信的问题(欢迎大家参与讨论)
本人现在驱动已经有了,需要将里面的数据采集变显示到mfc编写的界面上面去
基本的函数介绍如下:

API_open();///主要是接口的处理 打开驱动接口

API_start();///主要功能启动驱动的定时程序 里面包含IOCTL_Start_DPC 的函数,并进行内存空间的申请。

read();//// 主要功能是读出缓冲区里面的数据,并减少已经申请的空间的数量。

stop();//// 功能为停止定时器计时


现在mfc里面的功能是想实现点击一个按钮进行数据采集,按钮上有开始 和停止 初始为开始 点击一下变为停止 再点 变为开始

当点击开始时采集数据

现在的问题是由于读数据和API_start()需要一直读写 直到点击停止时结束
所以我用了死循环进行读数据,

CString s;
GetDlgItemText(IDOK,s);
if(s=="开始")
{
SetDlgItemText(IDOK,"停止");
while(1)
{
if(start1)
{
  API_start();
  ::Sleep(25);
  start1=false;
}
while(1)
{
read(signal,POINT_SIZE*10);

if((API_Read(show, stop1, page)==-1)&&(s=="停止")) // API_Read()读完1200个点后返回-1 stop();
;}
}
break;
}
}
else
{SetDlgItemText(IDOK,"开始");



但是好像程序一直在循环 处于不可停止的状态,很无语 ,大侠们有没有什么好的方法解决啊!使得开始和停止可以操作。


------解决方案--------------------
CreateThread()函数. 具体用法看msdn. 另外的要点我前几天已经回答你过.
------解决方案--------------------
(1)不求大改动的话,最好用多线程做,开一个线程在那读数据就ok了。
(2)还有种方法用定时器驱动读信息函数。
(3)如果自己编的驱动的话最好的方法还是改写驱动,最彻底。通过IOCTL发送一个回调函数指针给驱动程序,下位机采集完信息执行该函数,通过回调函数将采集信息发给应用程序。这种修改的话执行效率最高。