已经写好了,是多线程的,可以识别验证码自动登陆的发贴机器人,经过实验发现开3个线程的时候效率最高,开再多的线程速度反而慢下来了,但是随后又发现,几个发贴机器人一起开,每个开3线程,总的效率提升非常多,这是为什么?
如果我想只开一个多线程的,让他效率最高,怎么做.

解决方案 »

  1.   

    //刷课机 v0.3 多线程版using System;
    using System.Text;
    using System.Windows.Forms;
    using System.Net;
    using System.Net.Sockets;
    using System.IO;
    using System.Drawing;
    using System.Threading;
    using System.Timers;namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            int[] htable = new int[10] { 1470, 1896, 1875, 1465, 1543, 1592, 1526, 2437, 1379, 1739 };
            static CookieCollection cookiecoll;
            Encoding coding = Encoding.GetEncoding("UTF-8");
            bool bstart = false;
            int iFreq = 2;
            static int count = 0;
            static bool isDD = false;
            AutoResetEvent autoevent = new AutoResetEvent(true);
            Thread[] newThread = new Thread[50];
            static Thread kongzhi;        private string GetsRand()
            {
                int i, j;
                string sRand = null;
                try
                {
                    HttpWebRequest request;
                    HttpWebResponse response;
                    request = (HttpWebRequest)WebRequest.Create(@"验证码图片地址");
                    request.CookieContainer = new CookieContainer();
                    request.Timeout = 200;
                    request.CookieContainer.Add(cookiecoll);
                    request.ServicePoint.Expect100Continue = false;
                    response = (HttpWebResponse)request.GetResponse();
                    Stream rp = response.GetResponseStream();
                    Bitmap bmap = new Bitmap(rp);
                    for (int num = 0; num <= 3; num++)
                    {
                        Bitmap bbmp = bmap.Clone(new Rectangle(4 + 14 * num, 4, 8, 16), bmap.PixelFormat);
                        Color cc = bbmp.GetPixel(4, 0);
                        int hash = 0;
                        for (i = 0; i <= 7; i++)
                        {
                            for (j = 0; j <= 15; j++)
                            {
                                if (cc != bbmp.GetPixel(i, j))
                                {
                                    bbmp.SetPixel(i, j, Color.White);
                                    hash += i * j;
                                }
                                else
                                {
                                    bbmp.SetPixel(i, j, Color.Black);
                                }
                            }
                        }
                        for (i = 0; i <= 9; i++)
                            if (htable[i] == hash)
                                break;
                        sRand += i.ToString();
                    }
                    response.Close();
                }
                catch (System.Exception ex)
                {
                    //MessageBox.Show(ex.ToString());
                }
                return sRand;
            }        public Form1()
            {
                InitializeComponent();
            }        public void click(object sender, System.EventArgs e)
            {
                if (this.Visible)
                {
                    this.Visible = false;
                    this.Hide();
                    this.WindowState = FormWindowState.Minimized;
                }
                else
                {
                    this.Visible = true;
                    this.Show();
                    this.WindowState = FormWindowState.Normal;
                }
            }        private void Form1_Load(object sender, EventArgs e)
            {
                notifyIcon1.Icon = new Icon("MSN.ICO");
                notifyIcon1.Text = "";
                notifyIcon1.Visible = true;
                notifyIcon1.Click += new System.EventHandler(this.click);
                dateTimePicker1.MouseWheel += new MouseEventHandler(dateTimepicker1_mousewheel);
            }        private void dateTimepicker1_mousewheel(object sender, System.Windows.Forms.MouseEventArgs e)
            {        }        private void vv()
            {
                while (true)
                {
                    try
                    {
                        HttpWebRequest request;
                        HttpWebResponse response;
                        byte[] bdata;
                        string postMessage, rand;
                        rand = GetsRand();
                        request = (HttpWebRequest)WebRequest.Create(@"");
                        request.CookieContainer = new CookieContainer();
                        request.Timeout = 200;
                        request.CookieContainer.Add(cookiecoll);
                        request.Method = "POST";
                        request.AllowAutoRedirect = false;
                        request.ServicePoint.Expect100Continue = false;
                        request.KeepAlive = true;
                        request.Referer = @"";
                        request.Accept = @"application/x-shockwave-flash, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
                        request.UserAgent = @"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)";
                        request.Host = @"";
                        request.ContentType = @"application/x-www-form-urlencoded";
                        postMessage = @"selectionId=" + rand;
                        bdata = coding.GetBytes(postMessage);
                        request.ContentLength = bdata.Length;
                        request.GetRequestStream().Write(bdata, 0, bdata.Length);
                        request.GetRequestStream().Flush();
                        request.GetRequestStream().Close();
                        response = (HttpWebResponse)request.GetResponse();
                        StreamReader readStream = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                        response.Close();
                        count++;
                        this.Invalidate();
                        this.Update();
                        Thread.Sleep(20);
                    }
                    catch (System.Exception ex)
                    {
                    }
                }
            }        private void kz()
            {
                for (int i = 0; i < iFreq; i++)
                {
                    newThread[i] = new Thread(vv);
                    newThread[i].IsBackground = true;
                    newThread[i].Start();
                    Thread.Sleep(40);
                }
                autoevent.WaitOne();
                for (int i = 0; i < iFreq; i++)
                    newThread[i].Abort();
            }
      

  2.   

            private void button1_Click(object sender, EventArgs e)
            {
                HttpWebRequest request;
                HttpWebResponse response;
                byte[] bdata;
                string postMessage, rand;            if (bstart)
                {
                    button1.Text = "开始";
                    bstart = false;
                    autoevent.Set();
                }
                else
                {
                    timer1.Stop();
                    button2.Text = "定时";
                    button1.Text = "停止";
                    bstart = true;
                    autoevent.Reset();
                    try
                    {
                        request = (HttpWebRequest)WebRequest.Create(@"");
                        request.CookieContainer = new CookieContainer();
                        request.Timeout = 1000;
                        request.ServicePoint.Expect100Continue = false;
                        response = (HttpWebResponse)request.GetResponse();
                        cookiecoll = response.Cookies;
                        response.Close();                    rand = GetsRand();
                        request = (HttpWebRequest)WebRequest.Create(@"");
                        request.CookieContainer = new CookieContainer();
                        request.Timeout = 1000;
                        request.CookieContainer.Add(cookiecoll);
                        request.Method = "POST";
                        request.ServicePoint.Expect100Continue = false;
                        request.AllowAutoRedirect = false;
                        request.KeepAlive = true;
                        request.Accept = @"application/x-shockwave-flash, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
                        request.UserAgent = @"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)";
                        request.Referer = @"";
                        request.Host = @"";
                        request.ContentType = @"application/x-www-form-urlencoded";
                        postMessage = @"";
                        bdata = coding.GetBytes(postMessage);
                        request.ContentLength = bdata.Length;
                        request.GetRequestStream().Write(bdata, 0, bdata.Length);
                        request.GetRequestStream().Flush();
                        request.GetRequestStream().Close();
                        StreamReader readStream = new StreamReader(request.GetResponse().GetResponseStream(), Encoding.UTF8);
                        response.Close();
                        kongzhi = new Thread(kz);
                        kongzhi.Start();
                    }
                    catch (System.Exception ex)
                    {
                    }
                }
            }        private void numericUpDown1_ValueChanged(object sender, EventArgs e)
            {
                iFreq = (int)numericUpDown1.Value;
            }        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
            {
                Application.Exit();
            }        private void Form1_Paint(object sender, PaintEventArgs e)
            {
                label4.Text = "已刷" + count.ToString() + "次";
            }        private void Form1_SizeChanged(object sender, EventArgs e)
            {
                if (this.WindowState == FormWindowState.Minimized)
                {
                    this.Hide();
                }
            }        private void timer1_Tick(object sender, EventArgs e)
            {
                button1_Click(sender, e);
            }        private void button2_Click(object sender, EventArgs e)
            {
                if ((isDD) || (bstart))
                {
                    button2.Text = "定时";
                    isDD = false;
                    timer1.Stop();
                }
                else
                {
                    System.DateTime now = System.DateTime.Now;
                    if (now.CompareTo(dateTimePicker1.Value) > 0)
                        return;
                    timer1.Interval = (int)dateTimePicker1.Value.Subtract(now).TotalMilliseconds;
                    isDD = true;
                    button2.Text = "停止";
                    timer1.Start();
                }
            }
        }
    }
      

  3.   

    其实是个刷个机,带一个定时功能,timer1就是实现定时功能的定时器,敏感信息已经让我删了,因为有网址和密码