.NET中多线程处理

相信大家在.NET中处理大量数据的时候,不可避免的会用到线程。

那么线程的几个方法,大家应该都知道:

定义四个线程

            ReceiveThread = new Thread(new ThreadStart(ReceiveFunc));
            SaveThread = new Thread(new ThreadStart(SaveFunc));
            SendThread = new Thread(new ThreadStart(SendFunc));
            DataThread = new Thread(new ThreadStart(showDataToList));

实例化线程:

        public Thread ReceiveThread { get; set; }
        public Thread SaveThread { get; set; }
        public Thread SendThread { get; set; }
        public Thread DataThread { get; set; }

开启线程:

        ReceiveThread.Start(); // 启动线程
        DataThread.Start();
        SendThread.Start();
        DataThread.Start();

挂起线程:

        ReceiveThread.Suspend(); // 挂起线程
        DataThread.Suspend();
        SendThread.Suspend();
        DataThread.Suspend();

恢复线程:

        ReceiveThread.Resume(); // 恢复线程
        DataThread.Resume();
        SendThread.Resume();
        DataThread.Resume();

终止线程:

        ReceiveThread.Abort(); // 终止线程
        DataThread.Abort();
        SendThread.Abort();
        DataThread.Abort();

你多试几次,挂起和恢复,你会发现线程死掉了;

那么出现这个问题,怎么解决呢?

我想了一个比较笨的方法,在线程的主循环中,添加一个while循环,通过一个flag控制线程sleep,当需要线程暂停的时候,flag置ON,那么线程就会进入while循环,不停的sleep,当需要恢复线程的时候,将flag直接off掉,线程就恢复,而且,反复多次,线程运行正常;

实例代码:

while (Flag_Receive || ReceiveThreadSleepFlag)
            {
                while (ReceiveThreadSleepFlag)
                {
                    Thread.Sleep(1); // 线程sleep等待
                    continue;
                }
// 主线程事情
}

上面的Flag_Receive是主线程运行flag,ReceiveThreadSleepFlag是线程sleep的flag。

提供一种思路,希望对阅读这篇文章的读者,能够起到抛砖引玉的效果。

.NET中多线程处理,布布扣,bubuko.com

时间: 2024-10-18 01:27:05

.NET中多线程处理的相关文章

基础篇-Binder机制和AIDL使用介绍

简介: 我们知道,Android系统是基于Linux内核的,而Linux内核继承和兼容了丰富的Unix系统进程间通信(IPC)机制.例如管道(Pipe),报文队列(Message).共享内存(Share Memory)和信号量(Semaphore)等等.但是Android系统没有采用上述提到的各种进程间通信机制,而是采用Binder机制.在Android系统的Binder机制中,由一系列系统组件组成,分别是Client.Server.Service Manager和Binder驱动程序,其中Cl

Httpd.conf详解

Apache 的 httpd.conf 详解 ## Apache服务器主配置文件. 包括服务器指令的目录设置.# 详见 <URL:http://www.apache.org/docs/> ## 请在理解用途的基础上阅读各指令.## 再读取此文档后,服务器将继续搜索运行# E:/Program Files/Apache Group/Apache/conf/srm.conf # E:/Program Files/Apache Group/Apache/conf/access.conf# 除非用Re

apache---httpd.conf详解

## Apache服务器主配置文件.  包括服务器指令的目录设置.# 详见 <URL:http://www.apache.org/docs/> ## 请在理解用途的基础上阅读各指令.## 再读取此文档后,服务器将继续搜索运行# E:/Program Files/Apache Group/Apache/conf/srm.conf # E:/Program Files/Apache Group/Apache/conf/access.conf# 除非用ResourceConfig或AccessCon

Kafka consumer在项目中的多线程处理方式

对于KafkaConsumer而言,它不像KafkaProducer,不是线程安全的,状态是在consumer中维护的,所以实现时要注意多线程的使用,一般有2种使用方法: 1:每个Consumer有自己的线程,consumer去拉取数据,并对数据处理,这种方式比较简单,易于实现,容易顺序处理消息 2:消费者处理者方式,创建一个线程池,在consumer拉取数据后,由线程池来中的线程来处理数据,把拉取数据与处理数据解耦,但数据处理有可能破坏partition的消息顺序 从Kafka 文档中我们也可

java中ExecutorService使用多线程处理业务

ExecutorService executorService = Executors.newFixedThreadPool(5); List<CancelApprovalCallable> callables = new List<>(); for(int i=0,len=idsArray.size();i<len;i++){ String id = idsArray.get(i); CancelApprovalCallable callable = new CancelA

Android中使用多线程的各种姿势

写在前面:内容主要为黄岳钊老师视频分享课的学习笔记. 1)为什么需要多线程处理? 解决耗时任务 文件IO.联网请求.数据库操作.RPC 提高并发能力 同一时间处理更多事情 防止ANR InputDispatching Timeout:输入事件分发超时5s(触摸或按键) Service Timeout:服务20s内未执行完 BroadcastQueue Timeout:前台广播10s内未执行完 ContentProvider Timeout:内容提供者执行超时 避免掉帧 要达到每秒60帧,每帧必须

Java语言中的面向对象特性

1.1 面向对象的基本概念  面向对象的基本思想  面向对象是一种新兴的程序设计方法,或者是一种新的程序设计规范(paradigm),其基本思想是使用对象.类.继承.封装.消息等基本概念来进行程序设计.从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式.开发一个软件是为了解决某些问题,这些问题所涉及的业务范围称作该软件的问题域.其应用领域不仅仅是软件,还有计算机体系结构和人工智能等. 1. 对象的基本概念  对象是系统中用来描述客观事物的一个实体

JavaScript 中的多线程通信

本文参考<Html 5 与 CSS 3 权威指南> 在Html 5诞生之后,我们可以使用javascript来实现多线程处理.H5 新增了一个web workers api,使用这个API,用户可以很容易地创建在后台运行的线程,H5 中被称为workder ,如果将费时比家长的操作放到后台去执行,对用户在界面的操作就完全没有影响了. 创建后台线程也十分的简单,只要在workder类的构造器中将需要执行的脚本文件的url作为参数,然后创建worker对象就可以了,如下所示 var worker

实例演示ThreadLocal和Synchronized针对多线程处理

概述 在java2后,提供了threadlocal.这样一个新的工具类在处理多线程时提供了另外一种与之前不同的解决方案,而且对于开发者来说更加的简洁.它为每个访问这个变量的线程提供一个线程副本,并将这个副本存入到map中.这样就相当于每个线程都拥有自己独立的变量,在多线程并发操作时就不会造成操作数据的不一致.而在单例模式中,使用到的synchronized.它的机制是控制变量只有单线程进行访问,这样对于变量每次只有一个线程来操作句柄就不会操作数据的不一致. ThreadLocal类 Thread