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线程(读取事件) ...
随机推荐
- jsp 静态引入<%@ include %> 动态引入<jsp:include> 区别
1. 首先先介绍下,jsp机制: servlet容器,先将jsp转化成servlet,然后编译成.class文件,放置容器缓冲区[tomcat的work目录下]. 每次调用jsp时,服务器会读取编译 ...
- http post 接口
集团需求管理系统通过网状网与给各省公司需求管理系统进行交互.落地方为发起方提供访问的URL,发起方使用HTTP POST方法发送请求报文并得到应答报文,发起方作为落地方的HTTP客户端,落地方作为发起 ...
- 设置git的http代理
如果git仓库不和本地代码之间不可以直达,这个时候就可以考虑使用git 代理的方式提交代码到git仓库了; git http代理或者https代理,配置在~/.gitconfig 文件下,可以直接编辑 ...
- 百度开放平台连接MySQL数据库
在百度开放平台创建了MySQL数据库后只知道数据库名称,可以通过下面的方法进行连接: public function connect(){ $_server = getenv('HTTP_BAE_EN ...
- python基础学习Day9 函数的初识,实参、形参、
1.函数 def my_len(): l = [,,,,,,] count = for i in l: count += print(count) my_len() 定义的my_len()方法时,其结 ...
- SQL Server和MySQL数据库
导读:接下来的网上商城的项目,需要用到MySQL数据库了.这个对于我来说,是一个新接触的东西,按照惯例,在刚开始学习一个东西的时候,先从宏观上去了解它.本篇博客,先介绍SQL Server的基本内容, ...
- 使用yii\filters下的比如\PageCache需要在web.php里面的组件上配置'cache' => [ 'class' => 'yii\caching\FileCache', ],
public function behaviors(){ /*需要在config文件下的web.php里面加上 'cache' => [ 'class' => 'yii\caching\F ...
- web访问命令行
https://github.com/yudai/gotty go get github.com/yudai/gotty gotty -p 8000 -w kubectl exec -it mysql ...
- 大型运输行业实战_day13_1_定时任务spring-quartz
1.jar包 拷贝quartz-2.2.3.jar包到项目 2.编写定时任务类TicketQuart.java package com.day02.sation.task; import com.da ...
- 安装scrapy框架
前提安装好python.setuptools. 1.安装Python 安装完了记得配置环境,将python目录和python目录下的Scripts目录添加到系统环境变量的Path里.在cmd中输入py ...