我创建了一个小线程,用于循环接受字符串,如果收到“shutup”,则在主线程执行退出工作——即强制下线。请问子线程如何让主线程知道该下线了,并执行下线。

解决方案 »

  1.   

    线程同步问题。
    可以使用event来同步主线程和子线程。主线程CreateEvent,人工重置,并等待此event,成功等待后退出程序。子线程接收到"shutup"后,SetEvent,重置event为已通知状态。
      

  2.   

    可以在主线程定义自定义消息,然后子线程收到shutup后,调用PostThreadMessage发送这个自定义的消息给主线程,主线程收到后,消息响应函数里就执行你需要执行的操作
      

  3.   


    1.在头文件中#define WM_MY_MESSAGE (WM_USER+100)  
     
    2.写消息处理函数 
    LPESULT CUSERTHREAD::OnMyMessage(WPARAM wParam, LPARAM lParam)  
    {  
    // TODO: 处理用户自定义消息  
    ...  
    return 0;  
    }  
     
    3.在类头文件的AFX_MSG块中说明消息处理函数:
    ...  
    // 一般消息映射函数  
    protected:  
    // {{AFX_MSG(CMainFrame)  
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);  
    afx_msg void OnTimer(UINT nIDEvent);  
    afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);  
    //}}AFX_MSG  
    DECLARE_MESSAGE_MAP()  
    }  
     
    4.在用户类的消息块中,使用ON_MESSAGE宏指令将消息映射到消息处理函数中。
    ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)  
      

  4.   

    MFC工程,直接AfxGetApp()->SendMessage();
    那个APP就是主线程。
      

  5.   

    子线程循环接受字符串的时候 主线程在干什么?最合理的应该是 CreateEvent 然后 主线程 WaiteForSingleObject 等待这个事件,子线程接受到退出的时候SetEvent就可以了
      

  6.   

    楼主能否将你的需求详细的描述一遍。
    包括你的程序架构,比如你的线程到底跑在那个端?客户端还是服务端。
    你要通知退出的目标线程是什么?MFC主线程?还是另外一个子线程。越详细越好,现在的问题都变成大家伙猜测你的问题了。
      

  7.   

    我编写一个在线用户监控程序,主程序运行在服务器端,但为了实现强制下线功能,我就在客户端开了一个子线程,用来循环接收我的包,如果收到的字符串是“shutup”,就执行强制下线,当然是强制客户端主线程下线啊。
      

  8.   

    所以要知道你的主线成在干嘛啊?  如果说主线成在计算 for(int i=0;i!=9999999;++i);那你这功能不可能实现  除非子线程直接强制结束主线程
    你的主线程是在消息循环吗?  那样的话可以自定义一个消息WM_USER+1  子线程完毕后发送这个消息,主线程接收到这个消息就退出好了 这个不会假死
      

  9.   

    你的子线程在return之前发送一个消息给主线程