我想设计一个这样的类A,它能够主动的响应事件,比如某个时间发生时它的成员函数就自动执行,比如:A::ONEVENTHAPPEN(PARAM)
象这样的类是不是另外开了一个线程来监视这个事件的发生,但有事件发送时则执行这个响应事件的成员函数
假如我的想法是正确的话,这个线程函数是不是类似这个样子的
DWORD ThreadFun(LPVOID lpParam)
{
  while(等待事件发生)//没发生时SLEEP
{
  执行响应事件的函数
}
}

解决方案 »

  1.   

    当然不是,按照你的说法,没有多线程的时候这样的工作岂不是无法完成?其实每个线程都有自己的消息队列,并不一定要到其他的线程里面去监视,你直接给你的函数创建一个对你关注的消息的映射就可以了。但是这样的话,你需要有其他的方法获取到底是哪一个类对象绑定到这个函数上,否则你就要用static成员函数了……
      

  2.   

    总要有个人来开这个线程吧试一下继承CWinThread
      

  3.   

    象CSOCKET和MSCOMM,它们是怎么实现的?
      

  4.   

    这个就不清楚了
    你可以试一下看看CWinThread是否可以SetTimer
    行的话就可以相应WM_timer了
      

  5.   

    我想不从CWinThread继承,而是用API类实现
      

  6.   

    用while循环等待就OK了,设好CRITICAL_SECITON,我比较喜欢这样做,体验多线程的快感!
      

  7.   

    class CThread
    {
       public:
       virtual void ThreadRun(){};
       void         Start();
       private:
       satatic DWORD RealThread(CThread *pThis);
    }void CThread::Start()
    {
        CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ReadThread,this,0,NULL);
    }DWORD CThread::RealThread(CThread *pThis)
    {
       pThis->ThreadRun();
       return 0;
    }
      

  8.   

    哦,ThreadRun这个函数可能改成protected会好些。
      

  9.   

    有谁知道CSOCKET内部是怎么实现的?
      

  10.   

    谢谢各位,继续问
    我想知道CSOCKET和MSCOMM组件
    它们的OnReceive()和ONCOMM()函数是怎么触发的,是通过消息还是事件