黑马程序员技术交流社区

标题: 为什么新new出来了的执行完该方法后就KILL了CPU还占用这么.... [打印本页]

作者: 钟广雄    时间: 2012-6-9 21:21
标题: 为什么新new出来了的执行完该方法后就KILL了CPU还占用这么....
public void singleThreadScan()
        {
            string filePath = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"弱口令.txt";//获取文本物理路径
            using (StreamReader sr = new StreamReader(filePath, Encoding.Default))//准备流读文件内容
            {
                string pwd = "";
                while (!Iscounted)//Iscounted  标志 初始 false  循环读文本行
                {
                    if ((pwd = sr.ReadLine()) != null)
                    {
                       // mr = new ManualResetEvent(false);
                        lbox_msg.Items.Add(count + "............" + pwd);
                        lbox_msg.SelectedIndex = i;
                        i++;
                        th = new Thread(startConnectDB);
                        th.IsBackground = true;
                        th.Start(pwd);
                        th.Join(0);

                        //startConnectDB(pwd);//单线程调用

                        //线程池调用
                        //ThreadPool.SetMaxThreads(1000, 1000);
                        //ThreadPool.QueueUserWorkItem(new WaitCallback(startConnectDB), pwd);
                        //mr.WaitOne();
                        //count++;
                    }
                }
               
                MessageBox.Show("end");
            }
        }
        public void startConnectDB(object pw)
        {
            string pwd = (string)pw;
            try
            {
                IPAddress[] ip = Dns.GetHostAddresses(txt_ServerName.Text.Trim());//读取文本框的服务IP
               //组成字条串
                string connStr = Conn.conn + pwd;
                connStr = connStr.Replace("@{ip}", ip[0].ToString());
                using (SqlConnection conn = new SqlConnection(connStr))
                {
                    endTime = DateTime.Now;
                    lb_endtime.Text = endTime.ToLongTimeString();
                    Timespan();
                    conn.Open();
                    if (conn.State == ConnectionState.Open)
                    {
                        MessageBox.Show("cur");
                        txt_pwd.Text = pwd;
                        Iscounted = true;
                    }
                    if (th.IsAlive)
                    {
                        th.Abort();//kill线程
                    }
                }
            }
            catch (Exception)
            {
                ;
            }
为什么这样还占用这么大的CPU资源

作者: 戴伟    时间: 2012-6-10 13:00
应该是线程被阻塞了,把这句改成这样试试
while(!th.IsAlive)
{
        System.Threading.Thread.Sleep(1);
}

th.Abort();//kill线程

结束线程之前等待





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2