社区
C#
帖子详情
关于多线程间通信的问题
边城狂人
2009-07-01 10:41:20
现在我有多个线程,如
threadLog, thread1, thread2, thread3 ....
除了threadLog之外,其它每个线程的操作都需要记录下来,也就是说,需要写日志。但是问题在于,写日志的操作是线程不安全的,所以我初步打算是让它在threadLog里写日志,问题是,我如何在其它线程里让将信息传递给threadLog,并让它记录日志呢?
希望大家帮帮忙,能提供小示例更佳!
先谢!
...全文
183
17
打赏
收藏
关于多线程间通信的问题
现在我有多个线程,如 threadLog, thread1, thread2, thread3 .... 除了threadLog之外,其它每个线程的操作都需要记录下来,也就是说,需要写日志。但是问题在于,写日志的操作是线程不安全的,所以我初步打算是让它在threadLog里写日志,问题是,我如何在其它线程里让将信息传递给threadLog,并让它记录日志呢? 希望大家帮帮忙,能提供小示例更佳! 先谢!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
haiwangstar
2009-07-02
打赏
举报
回复
我做过类似你这样的问题.我的做法是用Queue<T>解决的.同楼上说的一样. 我是有多个线程产生数据,一个线程负责发送数据给远端,我让产生数据的线程产生数据后就立即用Enqueue把数据排队到队列中,同时置AutoResetEvent对象,以通知发送线程去读取. 读取线程用Dequeue读取数据..当然要自己实现线程同步..
龙宜坡
2009-07-02
打赏
举报
回复
[Quote=引用 13 楼 netcoder 的回复:]
参考12楼
我一般使用Queue
thread1、thread2...进行Enqueue操作
threadLog进行Dequeue操作
[/Quote]
不错的选择
netcoder
2009-07-02
打赏
举报
回复
参考12楼
我一般使用Queue
thread1、thread2...进行Enqueue操作
threadLog进行Dequeue操作
wangsaokui
2009-07-02
打赏
举报
回复
除了threadLog之外,其它每个线程的操作都需要记录下来,也就是说,需要写日志。但是问题在于,写日志的操作是线程不安全的
写的确是不安全的,但保存是安全的,比如你做一个ArrayListA,然后各个线程添加消息到ArrayListA是安全的,需要保存的时候可以声明另外一个ArrayListB,然后将ArrayListA拷贝到ArrayListB,让ArrayListB去保存,保存后清除ArrayListA中的数据,(清楚位置索引范围就是拷贝到B时的索引范围)
wqzone
2009-07-02
打赏
举报
回复
很简单呀,
1、注意线程操作控件(非本线程创建)会产生异常,可以考虑使用异步委托的方式。
2、可以使用队列。
2、也可以搞个锁定之类的东西。这不就解决冲突了吗?
zenowolf
2009-07-02
打赏
举报
回复
消息队列是个不错的选择(MSMQ)
边城狂人
2009-07-02
打赏
举报
回复
[Quote=引用 3 楼 onlyalone 的回复:]
其它线程通过PostThreadMessage给threadLog发送消息,threadLog里就弄一循环
while(true)
{
MSG msg;
GetMessage(msg);//函数原型不是这样的,去查查
switch(msg.message)
case:
......
}
[/Quote]
PostThreadMessage好像是Windows SDK中的的API吧,在.NET中该如何处理呢?有.NET专用的方法么?
边城狂人
2009-07-02
打赏
举报
回复
[Quote=引用 7 楼 cnzdgs 的回复:]
写日志时lock一下就可以了,不需要集中在一个线程处理。
[/Quote]
写日志只是举个例,实际是个很复杂的逻辑
happyboyxq
2009-07-02
打赏
举报
回复
委托不是可以跨线程操作吗?用委托就可以了
OnlyAlone
2009-07-02
打赏
举报
回复
[Quote=引用 9 楼 jamesfancy 的回复:]
引用 3 楼 onlyalone 的回复:
其它线程通过PostThreadMessage给threadLog发送消息,threadLog里就弄一循环
while(true)
{
MSG msg;
GetMessage(msg);//函数原型不是这样的,去查查
switch(msg.message)
case:
......
}
PostThreadMessage好像是Windows SDK中的的API吧,在.NET中该如何处理呢?有.NET专用的方法么?
[/Quote]
dllimport,可以使.net程序中可以调用win32 api。我发了前面那个帖子后去查了下msdn,没找到.NET下发送线程消息的方法,不知道是不是我自己看得不够仔细
cnzdgs
2009-07-01
打赏
举报
回复
写日志时lock一下就可以了,不需要集中在一个线程处理。
aimeast
2009-07-01
打赏
举报
回复
可以用生产消费
q863829288
2009-07-01
打赏
举报
回复
mark
codelabs
2009-07-01
打赏
举报
回复
[Quote=引用 3 楼 onlyalone 的回复:]
其它线程通过PostThreadMessage给threadLog发送消息,threadLog里就弄一循环
while(true)
{
MSG msg;
GetMessage(msg);//函数原型不是这样的,去查查
switch(msg.message)
case:
......
}
[/Quote]
正解
OnlyAlone
2009-07-01
打赏
举报
回复
其它线程通过PostThreadMessage给threadLog发送消息,threadLog里就弄一循环
while(true)
{
MSG msg;
GetMessage(msg);//函数原型不是这样的,去查查
switch(msg.message)
case:
......
}
春天的气息
2009-07-01
打赏
举报
回复
线程问题参考一下吧:
http://www.bbs180.com/topictag-14.aspx
ToHai
2009-07-01
打赏
举报
回复
帮顶一个
libevent多线程
8. **流程图**:链接中的博客文章(http://blog.csdn.net/i_am_jojo/article/details/7587838)提供了一个关于多线程Libevent应用的流程图,可以辅助理解多线程在Libevent中的工作原理和步骤。 9. **Client与Server...
下载 多线程编程技术开发资料 高清完整PDF版
死锁是多线程编程中经常遇到的一个
问题
,它指的是两个或多个线程互相等待对方释放锁,从而导致进程永远阻塞的情况。避免死锁需要程序员在设计程序时仔细规划锁的使用和线程间的交互。 8. 并发与并行 并发...
异步串口通信
多线程异步串口通信, 通过底层API实现,VS2010环境编码 在本人博客中有详尽的文档说明,介绍串口通信的知识 http://blog.csdn.net/mingojiang/article/details/7713529
Qt 一去丶二三里 Blog(二)
这篇博客内容可能涉及Qt的多个核心概念和技术,如用户界面设计、信号与槽机制、多线程编程、网络通信等。 在用户界面设计方面,Qt提供了丰富的控件和布局管理器,如QPushButton、QLabel、QLineEdit等,使得开发者...
Android基于Socket聊天最终版
总的来说,这个项目涵盖了Android应用开发中的多个关键知识点,如Socket通信、多线程、数据库操作和UI设计。开发者通过实现这个项目,不仅掌握了网络编程的基本原理,还锻炼了在Android平台上构建实际应用的能力。
C#
111,092
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章