向windows线程传递自定义消息,请高手相助.

flyshuttle 2001-08-23 09:42:26
我现在开发一个系统,系统的基本思想是:
该系统中每个角色都是用一个自定义的类来实现,该类可以接受系统自定义的消息,并做出响应.系统运行时,将产生多个子线程,在每个子线程中,创建一个基于角色类的对象.(这些对象应该能接收本系统发给他们的自定义消息)这样,当系统发送各种类型的自定义的消息时,各个线程就会在消息的驱动下,通过对自身状态的判断,做出各自的反应.
现在,我在开发中遇到的困难是:
1:如何在一个线程中,创建一个自定义的类对象(可以接受自定义消息)?(我在线程中定义了自定义类类型的成员变量,可是不能接收消息,是不是我的方法不对.)
2:如何向本系统中的各个线程发送消息.(我直接在系统主程序中使用SendMessage(),会不会有问题.)
希望各位高手能给于帮助.(只有思路也可以,大家可以交流)
...全文
162 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bignacl 2001-08-27
  • 打赏
  • 举报
回复
我是新手。
难道从CWinThread派生的类不需要用AfxBeginThread来启动吗?
flyshuttle 2001-08-27
  • 打赏
  • 举报
回复
多谢各位高手相助:
我现在想这样做:首先从CWinThread类中,派生出线程对象类,CWinThread类是从CCmdTarget类派生来的.所以它可以处理用户发送的自定义消息,在该类中定义对各个自定义信息的处理过程,在系统中定义CWinThread指针类型的数组列表,以保存各个对象的指针,再通过PostThreadMessage()函数向各个对象发送自定义消息.
不过,我有一点不清楚,从CWinThread类生成的线程对象和使用AfxBeginThread()生成的线程有什么不同?当线程很多时,会不会性能方面的问题?
zj_ok 2001-08-23
  • 打赏
  • 举报
回复
gz
haofox 2001-08-23
  • 打赏
  • 举报
回复
这个问题我也没有解决!
但我后来用两种方式解决了这个问题
1.你可以在类中加一个属性:status,设置不同的常数,表示将要进行什么样处理,然后可以在一
个线程中循环访问对象队列,访问:status,然后根据status的值做不同的处理!
2.你可以在住线程中建立要捕获消息的对象实例
jyf7862 2001-08-23
  • 打赏
  • 举报
回复
对于问题一
首先,在MFC中只有继承与CCmdTarget类的对象才拥有消息处理机制,才能接受处理一般消息,只有继承与CWnd类的对象才能够接受Windows消息(WM_COMMAND),比如用户命令。如果你自定义的成员变量不是继承与CCmdTarget类的,它是无法获得消息的,当然不能够处理消息了。
另外,你的线程是用户界面线程还是工作线程,如果是工作线程,它是无法处理用户输入的命令的,比如,按了菜单的命令
先说这些,以后补充
jsd198 2001-08-23
  • 打赏
  • 举报
回复
建立给予界面的线程而非工作者线程
scxy 2001-08-23
  • 打赏
  • 举报
回复
让线程自己建立消息机制,分发和处理消息
xiterator 2001-08-23
  • 打赏
  • 举报
回复
从情况看来可以尽量少用mfc的相关类,采用下列步骤可以做到:
1.建立Active Class以封装线程
2.为每个Active Class建立线程安全的消息buffer(采用信号灯pv操作)
3.最好不要显式调用SendMessage(windows API)之类的代码,而将向线程发送消息的工作封装在Active Class的方法(外部接口)实现中,如: void Active::PostMsg(const CSelfDefineMsg& x)
{ p(avail); //非阻塞消息可以不要注释掉
p(mutex);
copy x to buffer;
v(mutex);
v(full); //wake up thread of this Active instance
}
因为thread有自已的stack所以只要上述方法是thread safe.

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧