关于MEMO的问题,帮我看看,谢谢了。

wg961423 2003-04-19 09:29:16
我写了一个网上对话的程序,用MEMO来显示收到的信息,
收到后应为:
UserName1
Message1

UserName2
Message2

........
但由于是用多线程来收信息的(INDY),当多人向你发信息时有时会变成:
UserName1
UserName2
Message1
Message2

........
这该如何解决?
在这里我先谢了。
如果你不会,请帮我UP,谢了先。
...全文
32 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
wg961423 2003-04-29
  • 打赏
  • 举报
回复
up
xabcxyz 2003-04-26
  • 打赏
  • 举报
回复
用临界区 同步事件
nightfallrove 2003-04-25
  • 打赏
  • 举报
回复
<<WIN32多线程程序设计>>
用关键段能实现吗?
gyj_china 2003-04-25
  • 打赏
  • 举报
回复
up
TopCat 2003-04-23
  • 打赏
  • 举报
回复
不太方便,因为中间有不少业务相关的东西夹杂在里面,而且代码很多,不太好分离(以前做的,很乱了已经)。

真的不好意思。
wg961423 2003-04-23
  • 打赏
  • 举报
回复
能把你的这部分代码共享吗?
TopCat 2003-04-23
  • 打赏
  • 举报
回复
例程没有,但是我可以告诉你我自己在做的软件里就是这样处理的。
我认为这个实现应该不是太难的。
wg961423 2003-04-23
  • 打赏
  • 举报
回复
TopCat(令狐虫) :
你说的比较容易,有没有例程?
TopCat 2003-04-21
  • 打赏
  • 举报
回复
而且一定不会丢数据,只要你的队列做得好(一般要求能自动扩展大小)。
TopCat 2003-04-21
  • 打赏
  • 举报
回复
你可以这么解决:
定义一个缓冲队列类,在类中自己做好线程同步的工作,然后将你接受到的数据直接扔到这个队列中,另外用一个单独的显示线程,负责从缓冲队列区中取数据放到Memo中,这样就一定不会乱了。
wg961423 2003-04-21
  • 打赏
  • 举报
回复
to shadowstar(天作棋盘星作子,谁人敢下?)
每个线程得到的UserName、Message都不一样,Synchronize又不给带参数,怎么解决?


to qiuafa()
用你的方法,yourCriticalSection->Enter()后,其它线程会不会丢矢数据,或接收不到数据?
s98231106 2003-04-19
  • 打赏
  • 举报
回复

没错,就这样。
yuanreid 2003-04-19
  • 打赏
  • 举报
回复
同意 qiuafa() 。使用关键代码段可以避免多线程同时写入
chifengwatch 2003-04-19
  • 打赏
  • 举报
回复
同意楼上的说法
shadowstar 2003-04-19
  • 打赏
  • 举报
回复
void __fastcall TMyThread::AddUserMessage(void)
{
Memo1->Lines->Add(UserName);
Memo1->Lines->Add(Message);
}

Synchronize(AddUserMessage);
hellobcb 2003-04-19
  • 打赏
  • 举报
回复
把username作为message的一部分,收到以后再处理,就可以避免了吧!
qiuafa 2003-04-19
  • 打赏
  • 举报
回复
OnAddMessage(...) // 处理线程发来的添加消息的函数。
{
//
}

方法2.
添加消息用TCriticalSection锁住
//原子操作
yourCriticalSection->Enter();
Memo1->Add(UserName1);
Memo1->Add(UserName2);
yourCriticalSection->Leave();
aivinok 2003-04-19
  • 打赏
  • 举报
回复
我也是正在写这个东西.
做好可以发给我代码看看吗?
互相学习...
huangweiling@163.com
penu 2003-04-19
  • 打赏
  • 举报
回复
同一时间只允许一个线程写入memo。
wg961423 2003-04-19
  • 打赏
  • 举报
回复
to hellobcb(问问) :你的方法不行,我试过了。

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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