VC中如何实现线程通信 我创建了一个小线程,用于循环接受字符串,如果收到“shutup”,则在主线程执行退出工作——即强制下线。请问子线程如何让主线程知道该下线了,并执行下线。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 线程同步问题。可以使用event来同步主线程和子线程。主线程CreateEvent,人工重置,并等待此event,成功等待后退出程序。子线程接收到"shutup"后,SetEvent,重置event为已通知状态。 可以在主线程定义自定义消息,然后子线程收到shutup后,调用PostThreadMessage发送这个自定义的消息给主线程,主线程收到后,消息响应函数里就执行你需要执行的操作 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) MFC工程,直接AfxGetApp()->SendMessage();那个APP就是主线程。 子线程循环接受字符串的时候 主线程在干什么?最合理的应该是 CreateEvent 然后 主线程 WaiteForSingleObject 等待这个事件,子线程接受到退出的时候SetEvent就可以了 楼主能否将你的需求详细的描述一遍。包括你的程序架构,比如你的线程到底跑在那个端?客户端还是服务端。你要通知退出的目标线程是什么?MFC主线程?还是另外一个子线程。越详细越好,现在的问题都变成大家伙猜测你的问题了。 我编写一个在线用户监控程序,主程序运行在服务器端,但为了实现强制下线功能,我就在客户端开了一个子线程,用来循环接收我的包,如果收到的字符串是“shutup”,就执行强制下线,当然是强制客户端主线程下线啊。 所以要知道你的主线成在干嘛啊? 如果说主线成在计算 for(int i=0;i!=9999999;++i);那你这功能不可能实现 除非子线程直接强制结束主线程你的主线程是在消息循环吗? 那样的话可以自定义一个消息WM_USER+1 子线程完毕后发送这个消息,主线程接收到这个消息就退出好了 这个不会假死 你的子线程在return之前发送一个消息给主线程 为何数据通过参数传入DLL之后出错? Debug心得与大家一起分享 电子白板控件 消息反射之后,子控件处理了,如何让父窗口也处理呢? 怎样获得新开进程名和刚刚关闭的进程名? 双击树控件叶子节点对应什么消息? 如何使用户关掉无模式对话框成为只是隐藏对话框?而不是释放该对话框资源? 小问题:如何让控件在程序运行之后动态改变大小,比如说当基于对话框的窗口最大化之后,让其中的控件也相应地变大,以适应窗口的变化? 请教在dialogbar上通过按钮生成新的dialog的问题 gdi+ Bitmap转灰度? 求倒立摆的vc程序 GetDeviceCaps
可以使用event来同步主线程和子线程。主线程CreateEvent,人工重置,并等待此event,成功等待后退出程序。子线程接收到"shutup"后,SetEvent,重置event为已通知状态。
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)
那个APP就是主线程。
包括你的程序架构,比如你的线程到底跑在那个端?客户端还是服务端。
你要通知退出的目标线程是什么?MFC主线程?还是另外一个子线程。越详细越好,现在的问题都变成大家伙猜测你的问题了。
你的主线程是在消息循环吗? 那样的话可以自定义一个消息WM_USER+1 子线程完毕后发送这个消息,主线程接收到这个消息就退出好了 这个不会假死