To fireflyxx(星) :有没有现成的例程给我一个,贴出来也可以,我已经晕了。再开一个线程可能要影响到程序执行的时间了(即程序执行时间增加)

解决方案 »

  1.   

    线程函数:UINT count(LPVOID pParam)
    {  int i;
       for (i=0;i<10000;i++)
       {
          计算过程
        }
       }
    再程序中用  CWinThread *pthread=::AfxBeginThread(count,this,THREAD_PRIORITY_NORMAL);
    开启线程
      

  2.   

    主程序声明一个CEvent变量m_event,构造函数中m_event(FALSE,TRUE),在启动线程之前调用ResetEvent。线程函数同楼上,传入参数应该包含这个CEvent变量,在计算过程中加入
    if(::WaitForSingleObject(pMonitor->m_event,0) != WAIT_TIMEOUT)
        return
    之类的代码。要求线程结束的处理代码可以为
    m_event.SetEvent();
    ::WaitForSingleObject(m_pThread,INFINITE);
    m_pThread是线程对象指针。
      

  3.   

    To  fireflyxx(星) :有没有用SDK写的代码?  MFC我不熟。主要是开启线程的API函数。
      

  4.   

    MSG    msg;
        if    (PeekMessage(&msg, NULL,0,0,PM_REMOVE))  
        {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
      

  5.   

    用SDK写的关于线程的代码?  MFC我不熟。请各位提供一点关于SDK方面关于线程的函数。主要是开启线程的API函数。
      

  6.   

    HANDLE hThread=CreateThread(
                 LPSECURITY_ATTRIBUTESlpThreadAttributes,
                 DWORD dwStackSize,
                 LPTHREAD_START_ROUTINE lpStartAddress,
                 LPVOID lpParameter,
                 DWORD dwCreationFlags,
                 LPDWORD lpThreadId,
    };
    第五个参数为0 线程开始 CREATE_SUSPENDED为暂停线程
    CloseHandle(hThread) 
    关闭线程
      

  7.   

    在你的大循环中加入如下的语句,可以保证程序有机会相应其它的消息,你也就有机会终止这个大循环
    while(flag) //假设这是你的大循环

        ......  //你的循环处理过程
        MSG    msg;
        if(PeekMessage(&msg, NULL,0,0,PM_REMOVE))  
        {
          TranslateMessage(&msg);
          DispatchMessage(&msg);
        }
    }
      

  8.   

    SetTimer不行!
    还是建议多线程!
      

  9.   

    最好用多线程,如果不用多线程同意kwzzt(kwzzt)的做法。
      

  10.   

    最好还是用:
    HANDLE hThread=CreateThread(
                 LPSECURITY_ATTRIBUTESlpThreadAttributes,
                 DWORD dwStackSize,
                 LPTHREAD_START_ROUTINE lpStartAddress,
                 LPVOID lpParameter,
                 DWORD dwCreationFlags,
                 LPDWORD lpThreadId,
    };
    另外开一个线程来处理你的循环为好,为了简单,你可以在你的用一个全局的变量在你的主控线程和新开的线程共享来实现主控线程希望你的循环线程终止的时候让他终止。
      

  11.   

    wpxs0303(纹坪秀士):本来就应该用多线程,大家都说对不一定就不好,
    你下棋从来不走定式吗?
      

  12.   

    其实 kwzzt(kwzzt)的方法也不错只是 如果程序对实时性要求较高的话 可能会来不及处理
      

  13.   

    to wpxs0303(纹坪秀士)
    你说不用多线程该如何解决呢?多线程是解决这个问题最好的办法。不想开多线程就参考kwzzt(kwzzt)的办法。差不多可以说,这两种方法就是定式。
    过多讲究技巧的人才是可悲的。
      

  14.   

    只需要在循环中加入消息处理机制即可,前面fireflyxx和kwzzt都是这种思路,这么简单的问题还要用多线程?
    原因很简单,因为你的循环处理时,在没有跳出函数时,该进程不处理其他的消息,这时候菜单或者鼠标当然没有响应了,只要加入处理机制即可解决