while(1)
{
   bFind = finder.FindFile("f:\\open\\dataname\\*.*");
   while(bFind)
   {
       ...
   }
  Sleep(100);
}
我想让该循环0.1秒轮询一次,这样虽然可以实现,但是形成了死循环,窗口显示等操作就被挂起了,其他操作都做不了,该怎么做比较好呢,多线程好实现吗?如果不用多线程有没有其他办法,麻烦高手指导一下啊!

解决方案 »

  1.   

    while(1)

      bFind = finder.FindFile("f:\\open\\dataname\\*.*");
      while(bFind)
      {
        bFind = finder.FindNext();
        ...
      }
      Sleep(100);
    }
      

  2.   

    也可以不用循环,在WM_TIMER定时器里实现
      

  3.   

    肯定用多线程啊 
    CreateThread(NULL,0,ConVerst,this,0,NULL);//创建线程  ConVerst线程函数static DWORD WINAPI ConVerst(LPVOID lparmer);//线程函数定义DWORD ConVerst(LPVOID lparmer)
    {
    while(1)
      { 
      bFind = finder.FindFile("f:\\open\\dataname\\*.*");
      while(bFind)
      {
      ...
      }
      Sleep(100);
    }
    return 1;}
      

  4.   


    定时器的方式应该是最简单的,SetTimer的时候,弄成0.1秒的间隔即可。
      

  5.   

    对,然后OnTimer()里这样就可以了:
     bFind = finder.FindFile("f:\\open\\dataname\\*.*");
      while(bFind)
      {
      ...
      }
      

  6.   

    关于多线程
    这个系列介绍的不错
    http://www.vckbase.com/document/viewdoc/?id=1704
      

  7.   

    用timer定时器啊开始时:SetTimer添加消息处理:WM_TIMER
    结束时:KillTimer
      

  8.   

    while(1)

      bFind = finder.FindFile("f:\\open\\dataname\\*.*");
      while(bFind)
      {
      bFind = finder.FindNext();
      
      }
      Sleep(100);
    }
    把这段代码放在全局函数或静态函数中这样就可以了,怎么会死循环呢?
      

  9.   

    sleep(100)是不是主线程就挂起了?
    像这种函数应该另启线程。
      

  10.   

    用定时器吧,写一个函数如:
    void Cxx::fnFileFind
    {
      bFind = finder.FindFile("f:\\open\\dataname\\*.*");
      ...}继承onTimer
    void Cxx::OnTimer(UINT nID)
    {
       switch()
       {
       case 1:
           fnFileFind();
           break;
        }
    }调用
    setTime(1,100,NULL);OK