社区
C#
帖子详情
关于多线程间通信的问题
边城狂人
2009-07-01 10:41:20
现在我有多个线程,如
threadLog, thread1, thread2, thread3 ....
除了threadLog之外,其它每个线程的操作都需要记录下来,也就是说,需要写日志。但是问题在于,写日志的操作是线程不安全的,所以我初步打算是让它在threadLog里写日志,问题是,我如何在其它线程里让将信息传递给threadLog,并让它记录日志呢?
希望大家帮帮忙,能提供小示例更佳!
先谢!
...全文
176
17
打赏
收藏
关于多线程间通信的问题
现在我有多个线程,如 threadLog, thread1, thread2, thread3 .... 除了threadLog之外,其它每个线程的操作都需要记录下来,也就是说,需要写日志。但是问题在于,写日志的操作是线程不安全的,所以我初步打算是让它在threadLog里写日志,问题是,我如何在其它线程里让将信息传递给threadLog,并让它记录日志呢? 希望大家帮帮忙,能提供小示例更佳! 先谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
帮顶一个
异步串口通信
多线程异步串口通信, 通过底层API实现,VS2010环境编码 在本人博客中有详尽的文档说明,介绍串口通信的知识 http://blog.csdn.net/mingojiang/article/details/7713529
线程间通信
的几种实现方式
线程间通信
的几种实现方式 首先,要短信
线程间通信
的模型有两种:共享内存和消息传递,以下方式都是基本这两种模型来实现的。我们来基本一道面试常见的题目来分析: 题目:有两个线程A、B,A线程向一个集合...
C++多线程编程分析-
线程间通信
上文我们介绍了如何建立一个简单的多线程程序,多线程之间不可避免的需要进行通信。相比于进程间通信来说,
线程间通信
无疑是相对比较简单的。 首先我们来看看最简单的方法,那就是使用全局变量(静态变量也可以)来...
python多线程 -
线程间通信
(全局变量、queue)
什么是
线程间通信
呢? 多个线程处理同一资源,但是任务不同 为什么要通信? 如果各个线程之间各干各的,确实不需要通信,这样的代码也十分的简单。但这一般是不可能的,至少线程要和主 线程进行通信,不然计算...
多
线程间通信
的
问题
一 多
线程间通信
的
问题
多
线程间通信
的
问题
本质上就是, 一个线程负责维护一个变量/结构体, 另外的一个(多个)线程读取这个变量结构体的内容eg: 线程A维护结构体struA, 线程B需要不断的读取struA的内容多
线程间通信
时...
C#
110,535
社区成员
642,575
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章