写了一个线程 线程下启动了一个循环

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导致线程退出情况,查错的更多相关文章

  1. while true 死循环判断端口按顺序启动应用

    需求:spring微服务应用启动较慢并且要求一个应用启完才能启第二个应用. 思路:加了个while true 死循环判断端口启动了才启下一个应用. 执行方式:/appupgrade/spring_cl ...

  2. 并行编程之多线程共享非volatile变量,会不会可能导致线程while死循环

    背景 大家都知道线程之间共享变量要用volatilekeyword.可是,假设不用volatile来标识,会不会导致线程死循环?比方以下的伪代码: static int flag = -1; void ...

  3. 【Java 语言】Java 多线程 一 ( 线程启动 | 线程中断 )

    一. 线程启动 线程启动 : -- 1. 继承 Thread 运行线程 : 重写 Thread 类的 run 方法, 然后执行该线程; -- 2. 实现 Runnable 接口, 并运行线程; -- ...

  4. JAVA多线程之当一个线程在执行死循环时会影响另外一个线程吗?

    一,问题描述 假设有两个线程在并发运行,一个线程执行的代码中含有一个死循环如:while(true)....当该线程在执行while(true)中代码时,另一个线程会有机会执行吗? 二,示例代码(代码 ...

  5. python3线程启动与停止

    转自: https://blog.csdn.net/weixin_38125866/article/details/76795462 https://www.cnblogs.com/lcchuguo/ ...

  6. java线程启动原理分析

    一.前言不知道哪位古人说:人生三大境界.第一境界是:看山是山看水是水:第二境界是看山不是山看水不是水:第三境界:看山还是山看水还是水.其实我想对于任何一门技术的学习都是这样.形而上下者为之器,形而上者 ...

  7. MFC 线程启动、暂停、继续、终止

    CWinThread* p_myThread;//创建线程指针 BOOL flag_myThread = FALSE;//是否终止 //头文件中声明(放类内) static UINT MyThread ...

  8. Thread.start() ,它是怎么让线程启动的呢?

    作者:小傅哥 博客:https://bugstack.cn Github:https://github.com/fuzhengwei/CodeGuide/wiki 沉淀.分享.成长,让自己和他人都能有 ...

  9. Android系统--输入系统(七)Reader_Dispatcher线程启动分析

    Android系统--输入系统(七)Reader_Dispatcher线程启动分析 1. Reader/Dispatcher的引入 对于输入系统来说,将会创建两个线程: Reader线程(读取事件) ...

随机推荐

  1. 创建DLL动态链接库——声明导出法

    DLL声明导出法:是通过使用__declspec(dllexport),添加到需要导出的函数前,进行声明. 头文件定义如下(OPdll.h): 源文件定义如下(OPdll.cpp): 通过以上两个文件 ...

  2. 吴裕雄 18-MySQL GROUP BY 语句

    GROUP BY 语句根据一个或多个列对结果集进行分组.在分组的列上我们可以使用 COUNT, SUM, AVG,等函数.GROUP BY 语法SELECT column_name, function ...

  3. java 代码块,静态代码块,构造器等的执行顺序

    写了一段测试代码,如下: public class ExecutionSequence extends fatherClass{    static{        System.out.printl ...

  4. vue 父组件中的数据如何传递给子组件

    父组件:<template> <div id="app"> <img src="./assets/logo.png"> &l ...

  5. php设置头部让任何域名请求

    header("Access-Control-Allow-Origin: *"); // 允许任意域名发起的跨域请求...

  6. Java的学习路线图

    在网上看到一个关于Java的学习路线图,个人感觉很详细.https://blog.csdn.net/s1547823103/article/details/79768938

  7. spring 代理注解 <aop:aspectj-autoproxy />

    spring默认使用jdk的代理方式,使用jdk的代理方式我们知道,代理的类需要实现一个接口,若果没有就会报,java.lang.NoSuchMethodException: com.sun.prox ...

  8. python 常用模块(一): random , time , sys , os模块部分知识.

    1.常用模块:(1)collectiaons模块 (2)与时间相关  time模块 (3)random模块 (4)os模块 (5)sys模块 (6) 序列化模块: json  ,   pickle 2 ...

  9. python3使用paramiko操作远程机器

    目标:有A和B两台机器,希望在机器A上操作B上的脚本   解决方法:使用paramiko实现操作远程机器   1.安装paramiko   安装第三方包[pip3 install paramiko] ...

  10. GreenDao-自定义SQL查询-拼接多个查询条件-AndroidStudio

    //获取本地Pad(离线工作票列表) public static List<WTDetailTableBean> getPadWTList(String token, String use ...