C#多线程之间事件通知
我有两个线程,
线程1接受网络数据,存到队列; 线程2取队列,进行各种复杂的处理然后绘制到界面上; 想让线程1有数据了通知线程2,线程2再取队列,因为不通知的话,线程2一直在while循环检索队列时候有东西,很费cpu,怎么弄? 我现在用的是C#的ManualResetEvent,线程1给队列中加数据时,置为有信号, 线程2中,队列为空置为无信号,这样问题是置了好多个有信号,好浪费 也想过有AutoResetEvent,就怕两次set激活事件时间间隔太短会有问题........ 怎么办啊????,不要循环检查而是等到1的通知 更多0分享到:
|
#1 得分:20回复于: 2014-03-10 22:42:37
请百度 生产者与消费者。。。就会得到你想要的 |
|
#2 得分:0回复于: 2014-03-10 22:44:05
AutoResetEvent 用这个没问题的,
就算你两次Set 只要上次没执行完,就是没进入到WaitOne()阻塞,你执行多少次Set都没用 |
|
|
#3 得分:0回复于: 2014-03-10 22:56:36
引用 2 楼 wyd1520 的回复:
自动重置事件,两次set时间间隔很小的话,另一个线程WaitOne继续一次的,那就不对了, |
#4 得分:20回复于: 2014-03-10 23:05:21
你搞错了吧 线程1 有数据调用XXXEnQueue private void XXXEnQueue(xxx) 进队列 private xxx XXXDequeue() //取头元素 whiile(auto.WaitOne()) 这样就成了 |
|
|
#5 得分:0回复于: 2014-03-10 23:29:17
那什么时候reset()?还有多个线程之间都可以auto.Set()吗?没加锁啊
|
|
#6 得分:0回复于: 2014-03-10 23:30:05
那什么时候reset()?还有多个线程之间都可以auto.Set()吗?没加锁啊
|
#7 得分:0回复于: 2014-03-10 23:46:34
你去reset()他做啥,根本不用reset();
多个线程之间当然可以auto.Set(),你要了解生产者与消费者。关系。而不是一脑子在set reset上 |
|
|
#8 得分:0回复于: 2014-03-11 13:19:19
我说的是手动事件reset;
您没听懂我的原问题........ 如果用自动事件会是这样(有问题的): |
|
#9 得分:0回复于: 2014-03-11 22:00:07
用Monitor.Pulse解决!
|
最新文章
- python函数 与 函数式编程
- aop配置
- ALSA 学习小记
- phonegap学习笔记
- webconfig 文件加密处理
- Python自动化之YAML解析
- php手册杂记
- 二级c程序设计题(1)
- 无需操作系统和虚拟机,直接运行Python代码
- Mysql 存储程序
- .Net 使用 Oracle 提供组件访问数据库
- Java [leetcode 5] Longest Palindromic Substring
- BZOJ 1022 SHOI2008 小约翰的游戏John 博弈论
- 理解C#中的继承
- Verilog 读写文件
- PL/SQL 编程(一)基础,变量,分支,循环,异常
- 数据分析---《Python for Data Analysis》学习笔记【02】
- CSS公共清除浏览器默认样式
- Learning-MySQL【3】:数据类型和运算符
- 对 static const char* const str[] = {“string”} 的理解