c# 线程启动while(true) 死循环,里边的return导致线程退出情况,查错
写了一个线程 线程下启动了一个循环
while(true)
{
里边有个判断 如果为空不操作, 有余这个线程是后加的,老程序里边因为有个return没关注,导致线程退出而不能不听的监控
}
线程启动一个循环,这个循环要不听监控队列里边的值,有值操作,没值我给return了,所以出现了显示一会然后就不显示了.
有余是远程操作,有余调试机在内网,客户那边没做nat穿越,只能一点点加log 判断程序跑到哪里了
后来发现线程竟然无缘无故的退出了,
而不是通过我的退出机制退出,后来检查了一下才恍然大悟.
一下红线部分,作为记号吧
void MakeNextResult()
{
while (IsNextStartRead) //设备已经连接上,设备断链后,赋值为false 用于循环退出
{
CreateTxt.WriteDevLog(IsNextStartRead+ "IsNextStartRead为真", "devlog3");
if (NextListQueue.Count > )
{
try
{
CreateTxt.WriteDevLog(NextListQueue.Count + "队列数量", "devlog3");
string result = NextListQueue.Dequeue();
nextcount++;
ConfigHelper.UpdateAppConfig("nextcount", nextcount.ToString());
string time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //DateTime.Now.ToLongTimeString();
// CreateTxt.WriteLock(result + "\t" + time, "Tiao");
if (nextisshow == true)
{
CreateTxt.WriteDevLog("nextisshow为真", "devlog3"); ScanResultArgs n_scanresultargs = new ScanResultArgs();
n_scanresultargs.Scan_Result = result;
N_ScanResultEvent(n_scanresultargs); ScanCoutArgs scancountargs = new ScanCoutArgs();
scancountargs.Scan_Sum = nextcount.ToString();
N_ScanCoutEvent(scancountargs);
}
else
{
CreateTxt.WriteDevLog("nextisshow为假", "devlog3");
}
bool isinlist = ReadListHelper.IsResultInList(result);
if (isinlist) //若出现相同的 给return 了,此处是后来换成的continue;
{
continue;
}
else
{
CreateTxt.WriteLock(result + "\t" + "next" + "\t" + time, "First");
}
}
catch (Exception ex)
{
CreateTxt.WriteDevLog(ex.ToString(), "devlog");
}
}
else
{
CreateTxt.WriteDevLog("队列无值为休息三秒", "devlog3");
//没有任务,休息3秒钟
Thread.Sleep();
}
Thread.Sleep();
}
CreateTxt.WriteDevLog("线程退出", "devlog3");
}
C#编程语法中break ,continue, return这三个常用的关键字的学习对于我们编程开发是十分有用的,那么本文就向你介绍break ,continue, return具体的语法规范。
C#编程语法中我们会碰到break ,continue, return这三个常用的关键字,那么关于这三个关键字的使用具体的操作是什么呢?我们在使用这三关键字的时候需要注意和需要理解的规则是什么呢?让我们开始介绍吧:
一、C#编程语法之break语句:
break语句会使运行的程序立刻退出包含在最内层的循环或者退出一个switch语句。由于它是用来退出循环或者switch语句,所以只有当它出现在这些语句时,这种形式的break语句才是合法的。
如果一个循环的终止条件非常复杂,那么使用break语句来实现某些条件比用一个循环表达式来表达所有的条件容易得多。
for(var i=1;i<=10;i++)
{ if(i==6) break;
document.write(i);
}
//输出结果:12345
二、C#编程语法之continue语句:
continue语句和break语句相似。所不同的是,它不是退出一个循环,而是开始循环的一次新迭代。
continue语句只能用在while语句、do/while语句、for语句、或者for/in语句的循环体内,在其它地方使用都会引起错误!
for(var i=1;i<=10;i++)
{ if(i==6) continue;
document.write(i);
}
//输出结果:1234578910
三、C#编程语法之return语句:
return语句就是用于指定函数返回的值。return语句只能出现在函数体内,出现在代码中的其他任何地方都会造成语法错误!
当执行return语句时,即使函数主体中还有其他语句,函数执行也会停止!
C#编程语法中的break ,continue, return这三个常用的关键字的使用相关内容就向你介绍到这里,希望对你了解和学习break ,continue, return这三个常用关键字的使用有所帮助。
c# 线程启动while(true) 死循环,里边的return导致线程退出情况,查错的更多相关文章
- while true 死循环判断端口按顺序启动应用
需求:spring微服务应用启动较慢并且要求一个应用启完才能启第二个应用. 思路:加了个while true 死循环判断端口启动了才启下一个应用. 执行方式:/appupgrade/spring_cl ...
- 并行编程之多线程共享非volatile变量,会不会可能导致线程while死循环
背景 大家都知道线程之间共享变量要用volatilekeyword.可是,假设不用volatile来标识,会不会导致线程死循环?比方以下的伪代码: static int flag = -1; void ...
- 【Java 语言】Java 多线程 一 ( 线程启动 | 线程中断 )
一. 线程启动 线程启动 : -- 1. 继承 Thread 运行线程 : 重写 Thread 类的 run 方法, 然后执行该线程; -- 2. 实现 Runnable 接口, 并运行线程; -- ...
- JAVA多线程之当一个线程在执行死循环时会影响另外一个线程吗?
一,问题描述 假设有两个线程在并发运行,一个线程执行的代码中含有一个死循环如:while(true)....当该线程在执行while(true)中代码时,另一个线程会有机会执行吗? 二,示例代码(代码 ...
- python3线程启动与停止
转自: https://blog.csdn.net/weixin_38125866/article/details/76795462 https://www.cnblogs.com/lcchuguo/ ...
- java线程启动原理分析
一.前言不知道哪位古人说:人生三大境界.第一境界是:看山是山看水是水:第二境界是看山不是山看水不是水:第三境界:看山还是山看水还是水.其实我想对于任何一门技术的学习都是这样.形而上下者为之器,形而上者 ...
- MFC 线程启动、暂停、继续、终止
CWinThread* p_myThread;//创建线程指针 BOOL flag_myThread = FALSE;//是否终止 //头文件中声明(放类内) static UINT MyThread ...
- Thread.start() ,它是怎么让线程启动的呢?
作者:小傅哥 博客:https://bugstack.cn Github:https://github.com/fuzhengwei/CodeGuide/wiki 沉淀.分享.成长,让自己和他人都能有 ...
- Android系统--输入系统(七)Reader_Dispatcher线程启动分析
Android系统--输入系统(七)Reader_Dispatcher线程启动分析 1. Reader/Dispatcher的引入 对于输入系统来说,将会创建两个线程: Reader线程(读取事件) ...
随机推荐
- 传输层——TCP报文头介绍
16位源端口号 16位目的端口号 32位序列号 32位确认序列号 4位头部长度 保留6位 U R G A C K P S H R S T S Y N F I N 16位窗口大小 16位检验和 16位紧 ...
- asp.net控件中的reportview不显示
如果reportview在asp.net中,图标出不来,打X 1.安装reportview控件(在装有vs2010中的电脑中搜,不要去下载,下载可能会出错) 2.如果是iis7以上版本,web.con ...
- Redis Cluster 添加/删除 完整折腾步骤
Redis还是挺好玩的,今天测试了集群的添加.删除节点.重分配slot等.更深入的理解redis的游戏规则.步骤繁多,但是详细. 环境解释: 我是在一台Centos 6.9上测试的,各个redis节点 ...
- Java happen-before
下面是happens-before原则规则: 程序次序规则:一个线程内,按照代码顺序,书写在前面的操作先行发生于书写在后面的操作: 锁定规则:一个unLock操作先行发生于后面对同一个锁额lock操作 ...
- flask_script 创建自定义命令行
创建管理员账号: 在服务器部署后,由于管理员账号没有申请的路径,需要在一开始的时候设定管理员账号,如果使用过程中需要新增管理员账号,十分不方便,在flask_script中可以通过命令 ...
- SSM框架简介及整合教程
1.Spring Spring 框架是 Java 应用最广的框架,它的成功来源于理念,而不是技术本身,它的理念包括 IoC (控制反转) 和 A面向切面编程).Spring框架是个轻量级的Java E ...
- Java的学习路线图
在网上看到一个关于Java的学习路线图,个人感觉很详细.https://blog.csdn.net/s1547823103/article/details/79768938
- centos7防火墙以设置以及关闭selinux
一.CentOS 7.X 关闭SELinux 1.查看 getenforce permissive 或者 enforcing模式 2.临时设置 setenforce 1 成为permissive模式 ...
- Loading Assets from AssetBundles
[Loading Assets from AssetBundles] 1.LoadAsset GameObject gameObject = loadedAssetBundle.LoadAsset&l ...
- Application类
using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO; usin ...