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线程(读取事件) ...
随机推荐
- delphi 原创应用工具箱
用到的主要知识点: (1) listview背景透明 (2) 读取应用图标 (3)图标透明 (4)实时显示微软必应首页图,裁剪图片等
- 第六次Scrum冲刺
第六次Scrum冲刺 1.成员今日完成情况 队员 今日完成任务 刘佳 前端构建 李佳 后端设计 周世元 数据设计 杨小妮 博客编写 许燕婷 管理团队当日及次日任务 陈水莲 性能测试用例设计 曾丽丽 性 ...
- [译]CQRS介绍
以下内容均为看完原文后自己的理解.并非一字一句翻译,会尽量保持原文意思. 什么是 CQRS: CQRS 意思就是命令查询职责分离(Command Query Responsibility Segreg ...
- tf.name_scope()和tf.variable_scope() (转)
网络层中变量存在两个问题: 随着层数的增多,导致变量名的增多: 在调用函数的时候,会重复生成变量,但他们存储的都是一样的变量. tf.variable不能解决这个问题. 变量作用域使用tf.var ...
- Python基础学习Day2
一.格式化输出 需求格式化输出:姓名.年龄.工作.爱好 # 格式化输出 name = input('请输入用户名:') age = input('请输入年龄:') job = input('请输入你的 ...
- linux下进程查找和杀死
比如杀死进程中叫 abc的进程 1.ps -ef |grep abc|awk '{print $2}' xargs kill -9 2.kill `pidof abc` `位于tab键 ...
- vue 解决页面闪烁问题
watch: { //监听表格数据的变化[使用 watch+nextTick 可以完成页面数据监听的 不会出现闪烁] tableData: { //深度监听,可监听到对象.数组的变化 handler( ...
- common mistake of closure in loops
[common mistake of closure in loops] 下例中item引用的始终是最后一个值. function showHelp(help) { document.getEleme ...
- appium的兼容问题
appium 和Android7.0的兼容问题 标签(空格分隔): appium 随着Android系统的不断的迭代更新,目前Android系统都已经更新到9.0系统了,有些小伙伴appium版本还是 ...
- 四、Factory Method 工厂方法模式
需求:对象的创建由工厂统一创建,会使用到模板模式 代码清单: 工厂: public abstract class Factory { public abstract Product createPro ...