读书人

线程的完事顺序是

发布时间: 2012-10-08 19:54:56 作者: rapoo

线程的结束顺序是?

C# code
namespace WindowsFormsApplication2{    class Class1    {        public volatile bool shouldStop;        private Form1 form;        public Class1(Form1 form)        {            this.form = form;        }        public void Method1(object obj)        {            string s = obj as string;            form.AddMessage(s);            while (shouldStop == false)            {                Thread.Sleep(1000);//将当前线程阻塞,线程1休眠100毫秒                form.AddMessage("a");            }            form.AddMessage("\n线程Method1已经终止");        }        public void Method2(object obj)        {                        while (shouldStop == false)            {                Thread.Sleep(1000);//将当前线程阻塞,线程2休眠100毫秒                form.AddMessage("b");            }            form.AddMessage("\n线程Method2已经终止");        }    }}

C# code
namespace WindowsFormsApplication2{    public partial class Form1 : Form    {        Thread thread1, thread2;        Class1 cls;        public Form1()        {            InitializeComponent();            cls = new Class1(this);        }        private void btnStart_Click(object sender, EventArgs e)        {            richTextBox1.Clear();            cls.shouldStop = false;            thread1 = new Thread(cls.Method1);            thread1.IsBackground = true;            thread2 = new Thread(cls.Method2);            thread2.IsBackground = true;            thread1.Start("a method start\n");            thread2.Start();        }        private delegate void AddMessageDelegate(string message);        public void AddMessage(string s)        {            if (richTextBox1.InvokeRequired == true)            {                AddMessageDelegate d = AddMessage;                richTextBox1.Invoke(d, s);            }            else            {                richTextBox1.AppendText(s);            }        }        private void btnStop_Click(object sender, EventArgs e)        {            cls.shouldStop = true;            thread2.Join(2000); //总是先是线程2结束,然后线程1结束            thread1.Join(5000);            /*             * thread1.Join(0);//问题1:总是先是线程2结束,然后线程1结束,为什么?             * thread2.Join(0); //问题2:看了参数表是时间,这里参数为0是表示 立即么?和无参数有什么区别?             */        }    }}


[解决办法]
没看明白你1的问题
2的问题:
0代表将当前时间片剩下部分交出。

读书人网 >C#

热点推荐