2013、10、18  通讯组件开发

情景:

主线程添加队列,子线程负责队列中消息发送。当队列中数据为空时,停止发送挂起子线程。
当主线程添加队列时,重新开启子线程进行消息发送。
方案一 但是不采用
传统Thread线程方式:首先方法过期thread.Suspend();暂不采用
。其次主子线程同时控制挂起和重启时候,可能会造成遗漏。
例如 子线程正在挂起,主线程网队列中添加一条数据时。子线程挂起,但是主线程刚添加的消息没有被及时发送出去
这样的话虽然可以在下次添加时启用子线程进行发送。但是刚才添加的数据没有被及时发送。因为涉及导数据的及时性因此不采用此种方式。
而且会收到线程状态瞬间切换问题操作重启线程无效
方案二 ResetEvent
ResetEvent 这个函数把指定的事件对象设置为无信号状态。当重新获得信号时才会继续开启发送
这样的话 在子线程中监视到队列为空时则停止队列发送。
同时每次添加新的队列信息是,都会发送开启子线程信息号。并且不受到线程的状态影响。
因此可以保证队列数据的及时性。
参照代码
  ManualResetEvent manualEvent = new ManualResetEvent(false);
        private void Form1_Load(object sender, EventArgs e)
        {
// 开启线程
            Thread th = new Thread(Test);
            th.Start();
        }
        int c = 0;
        public void Test()
        {
            while (true)
            {
                c++;
                Console.WriteLine(c);
                if (c == 10000)
                {
                    manualEvent.WaitOne();
  manualEvent.Reset();
                }
            }
        }
        // 发送叫起信号
        private void button1_Click(object sender, EventArgs e)
        {
            manualEvent.Set();
        }

net 线程挂起的更多相关文章

  1. java并发编程(三)线程挂起,恢复和终止的正确方法

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17095733    下面我们给出不用上述两个方法来实现线程挂起和恢复的策略--设置标志位. ...

  2. 通过 Javacore 诊断线程挂起等性能问题

    http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1406_tuzy_javacore/1406_tuzy_jav ...

  3. 转: 【Java并发编程】之三:线程挂起、恢复与终止的正确方法(含代码)

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17095733 挂起和恢复线程     Thread 的API中包含两个被淘汰的方法,它们用 ...

  4. GCD之线程挂起与恢复

    我们可以使用dispatch_suspend函数暂停一个queue以阻止它执行block对象;使用dispatch_resume函数继续dispatch queue.调用dispatch_suspen ...

  5. rt-thread 低优先级线程挂起高优先级线程失败

    @2019-01-13 [小记] 使用rt-thread线程管理功能时,低优先级线程挂起高优先级线程失败,高优先级线程或同等优先级线程挂起低优先级线程则成功.

  6. 【Java并发编程】:线程挂起、恢复与终止

    挂起和恢复线程     Thread 的API中包含两个被淘汰的方法,它们用于临时挂起和重启某个线程,这些方法已经被淘汰,因为它们是不安全的,不稳定的.如果在不合适的时候挂起线程(比如,锁定共享资源时 ...

  7. 解决FTPClient linux环境下FTPClient调用retrieveFileStream导致线程挂起(防火墙问题);下载文件小于实际文件问题

    FTPClient调用retrieveFileStream导致线程挂起(防火墙问题):下载文件小于实际文件问题解决 实际是因为FTP的两种传输模式:主动模式和被动模式的不同而导致的 FTPClient ...

  8. 【Java并发编程】之三:线程挂起、恢复与终止的正确方法

    挂起和恢复线程 ​ Thread 的API中包含两个被淘汰的方法,它们用于临时挂起和重启某个线程,这些方法已经被淘汰,因为它们是不安全的,不稳定的.如果在不合适的时候挂起线程(比如,锁定共享资源时), ...

  9. 利用NtQuerySystemInformation函数遍历进程,遍历线程,获取线程挂起或运行状态

    版权声明:专注于计算机网络安全学习 https://blog.csdn.net/u011672712/article/details/51586030 1 2 3 4 5 6 7 8 9 10 11 ...

随机推荐

  1. angular4搭建博客(一)

    本文长期更新,未经运行,严禁转载. 博客(制作中) http://101.200.58.228/ Github https://github.com/Teloi/TEIndex 框架选择 Angula ...

  2. Kettle bug收集

    20160919(未确定): 加载表的使用"Use batch update for inserts"会引致奇怪的转换失败? 出错日志: - linenr 450000- line ...

  3. SqlServer与MySql 系统表查询自建表数据

    SqlServer: SELECT * FROM sys.sysobjects WHERE type='U' ORDER BY name SELECT * FROM sys.syscolumns WH ...

  4. root密码忘记怎么办?

    忘记root密码:按 e进入内核在按e,后面加1 .按b启动 进入命令行输入passwd,设置新的密码后exit退出即可

  5. Kafka学习笔记(6)----Kafka使用Producer发送消息

    1. Kafka的Producer 不论将kafka作为什么样的用途,都少不了的向Broker发送数据或接受数据,Producer就是用于向Kafka发送数据.如下: 2. 添加依赖 pom.xml文 ...

  6. <td colspan="6"></td>代表这个td占6个td的位置

    <td colspan="6"><span class="order-time">2017-10-11 14:55:23</spa ...

  7. 如何处理CSS3属性前缀(转载)总结

    今天闲来无聊,重新来说说CSS3前缀的问题.在春节前和@一丝姐姐说起Sass中有关于gradient的mixins.姐姐说: 为什么还要用mixin呢?为什么不使用Autoprefixer?使用Aut ...

  8. kali2018.2安装配置OpenVAS-9及错误处置

    1 配置环境 1)虚拟机环境:VMware® Workstation 14 Pro(版本号:14.1.2 build-8497320),如图1. 图1 虚拟机版本信息 2)kali镜像 Kali201 ...

  9. Shader的初步学习

    Shader 着色器 .shader 仅仅是渲染流水线中的一个环节,要想让shader发挥出它的作用,我们就需要知道它在渲染流水线中扮演什么样的角色. 渲染流水线的工作任务在于由一个三维场景出发.生成 ...

  10. HTTP 请求报文和响应报文分析和解刨!!

    http请求和响应报文分析 一>http请求报文主要包括三个部分:1.请求行:2.请求头:3;请求体: 1,请求行一般包括三个部分:请求方式:请求url : http协议版本. 请求方法:大部分 ...