当前位置:编程学习 > C#/ASP.NET >>

后端使用多线程问题

 for (int i = 0; i < dtEmp.Rows.Count; i++)//循环每一个人
        {
            string empid = dtEmp.Rows[i]["Employeeid"].ToString();
            string deptcode = dtEmp.Rows[i]["deptcode"].ToString();
            string cnname=dtEmp.Rows[i]["CNname"].ToString();
       //实例化一个带参和返回的线程类
            EmployeeLineShow employeeLineShow = new EmployeeLineShow(empid,deptcode,cnname,role,Contoltype,doall,i,this.Context,dt);
            Thread t = new Thread(employeeLineShow.EmpExecution);
            t.IsBackground = true; //注意这里
            t.Start();
           threadList.Add(t);
           EmployeeLineShowList.Add(employeeLineShow);
        }
        for (int i = 0; i < threadList.Count; i++)
        {
            Thread t = (Thread)threadList[i];
            t.Join();
            t.Abort();
        }
        for (int i = 0; i < EmployeeLineShowList.Count;i++ )
        { 
            EmployeeLineShow employeeLineShow = EmployeeLineShowList[i];
            tr11 += employeeLineShow.TrMiddle;
            trleft += employeeLineShow.TrLeft;
            trright += employeeLineShow.TrRight;
        }

1. t.IsBackground = true;如果我这个不定义,则表示是前端线程,不会随主线程消亡而消亡,但是我后面有t.Abort()为什么还是不结束啊?导致出现异常情况。
2. 我现在这样设置,如果很多人同时访问站点时,是否也会出现问题? 可能同时产生好几个访问主线程情况。

有这方面资料的请给我留点啊。菜鸟困惑中

多线程 后端 --------------------编程问答-------------------- 无人问津? 还是问题都不会啊? --------------------编程问答-------------------- LZ:
1.abort()的功能是用来终止调用此办法的线程的,只是在多半景象下,它须要一点时候,有些延迟(可能在短时候内此线程还在履行)...
2.join()办法它的功能不是终止线程,而是在t线程终止之前,阻拦正在停止(调用了abort()办法但还未停止)的t线程履行,同时使主线程守候,直到t线程终止(也就是abort()办法终止过程完毕)了再履行下面的代码,打印出来的成果,履行状况就为FALSE,线程状况也为停止了 --------------------编程问答--------------------
引用 2 楼 conanhhy 的回复:
LZ:
1.abort()的功能是用来终止调用此办法的线程的,只是在多半景象下,它须要一点时候,有些延迟(可能在短时候内此线程还在履行)...
2.join()办法它的功能不是终止线程,而是在t线程终止之前,阻拦正在停止(调用了abort()办法但还未停止)的t线程履行,同时使主线程守候,直到t线程终止(也就是abort()办法终止过程完毕)了再履行下面的代码,打印出来的成果,履行状况就为FALSE,线程状况也为停止了


谢谢,现在页面后台主线程 使用多线程,会导致服务器端出现各种问题。 --------------------编程问答-------------------- Join和Abort你只需要用其中之一就行。LS已经解释了,你的需求应该是想调用Abort()
等到执行Abort的时候,线程已经执行完毕停止了,强行终止线程有时会导致内存泄漏,是不推荐的做法
你的需求,可以在employeeLineShowk中定义一个bool字段或者一个类,用来标识线程执行过程中的各种状态
在线程里执行的EmpExecution方法中判断这个字段的状态
--------------------编程问答--------------------
引用 4 楼 dongxinxi 的回复:
Join和Abort你只需要用其中之一就行。LS已经解释了,你的需求应该是想调用Abort()
等到执行Abort的时候,线程已经执行完毕停止了,强行终止线程有时会导致内存泄漏,是不推荐的做法
你的需求,可以在employeeLineShowk中定义一个bool字段或者一个类,用来标识线程执行过程中的各种状态
在线程里执行的EmpExecution方法中判断这个字段的状态


谢谢,好像问题没问好,其实不是说这2个函数应用的问题,是网页后端用多线程,各页面出现很多异常。 --------------------编程问答-------------------- 你去看一下Abort()方法的详细说明,本身就是要抛异常的
http://msdn.microsoft.com/zh-cn/library/ty8d3wta(v=vs.90).aspx
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,