黑马程序员学习日记----多线程(一)

来源:互联网 发布:license.lic 破解软件 编辑:程序博客网 时间:2024/03/29 18:35

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------

1,什么是进程?
当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。
而一个进程又是由多个线程所组成的。

2,什么是线程?
线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。

3,什么是多线程?
多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。

4,多线程的好处:
可以提高CPU的利用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样就大大提高了程序的效率。 

5,多线程的不利方面:
线程也是程序,所以线程需要占用内存,线程越多占用内存也越多; 
多线程需要协调和管理,所以需要CPU时间跟踪线程; 
线程之间对共享资源的访问会相互影响,必须解决竞用共享资源的问题;
线程太多会导致控制太复杂,最终可能造成很多Bug;

接下来将对C#编程中的多线程机制进行探讨。为了省去创建GUI那些繁琐的步骤,更清晰地逼近线程的本质,接下来的所有程序都是控制台程序,程序最后的Console.ReadLine()是为了使程序中途停下来,以便看清楚执行过程中的输出。 

首先,多线程的命名空间为:using System.Threading;
 Thread threadClient = null;
        Socket socketClient = null;
        private void btnChatClient_Click(object sender, EventArgs e)
        {
            IPAddress address = IPAddress.Parse(txtIP.Text.Trim());
            IPEndPoint endPoint = new IPEndPoint(address, int.Parse(txtPort.Text.Trim()));
            socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socketClient.Connect(endPoint);
            //创建线程
            threadClient = new Thread(RecClient);
            threadClient.IsBackground = true;
            threadClient.Start();
        }
        void ShowMsg(string msg)
        {
            txtMessage.AppendText(msg + "\r\n");
        }
        void RecClient()
        {
            while (true)
            {
                //定义一个接收的缓存区
                byte[] arrMsg = new byte[1024 * 1024 * 2];//2M的缓存空间
                //将接收的数组放入arrMsg内
                int length = socketClient.Receive(arrMsg);
                string strMsg = System.Text.Encoding.UTF8.GetString(arrMsg, 0, length);
                ShowMsg("服务器说:" + strMsg);
            }
        }
    }
}

Thread类有几个至关重要的方法,描述如下:
Start():启动线程;
Sleep(int):静态方法,暂停当前线程指定的毫秒数; 
Abort():通常使用该方法来终止一个线程;
Suspend():该方法并不终止未完成的线程,它仅仅挂起线程,以后还可恢复; 
Resume():恢复被Suspend()方法挂起的线程的执行;


---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ---------------------- 
详细请查看:http://net.itheima.com/