c#网络编程之TCP/IP(一)C#线程任务基础Thread

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/specialshoot/article/details/51379076

这些日子很忙,太多的任务。今天把c#tcp/ip完善了一下,两种方式进行TCP/IP通信,一种是多线程,一种是多任务。之前看了c#之网络编程这本书,启发很大,但是里面的demo有很多很多的问题,以后我会一一讲述。再完善书上TCP/IP的历程中的逻辑不合理和bug的前提下,加入了心跳包发送机制,这一点c#有一个坑,回来慢慢给大家讲。

工欲善其事必先利其器,首先我们将一下C#的线程基础。


线程Thread


主线程和辅助线程

无论是控制台应用程序、WinForm、WPF程序,系统都会为进程创建一个默认的线程,这个线程为主线程。除了主线程外其他线程都是辅助线程。

C#界面编程UI线程是主线程,拥有大量计算操作和耗时操作都不能放在主线程中,否则会造成阻塞,这一点不仅仅是C#,java、android都是一样的。


前台线程和后台线程

一个线程要么是前台线程,要么是后台线程。两者的区别是:后台线程不会影响进程的终止,而前台线程会影响进程的终止。
用Thread对象创建的线程默认是前台线程,在托管线程池中执行的线程默认为后台线程。从非托管代码进入托管执行环境的所有线程也都被自动标记为后台线程。
IsBackground属性:获取或设置一个值,该值指示某个线程是否在后台执行。如果在后台执行为true,否则为false
IsThreadPoolThread属性:获取一个值,该值指示线程是否在托管线程池中执行。如果此线程在托管线程池中执行则为true,否则为false。


创建线程

形式
Thread t=new Thread(<方法名>)
比如:
Thread t1=new Thread(Method1);
public void Method1(){...}

Thread t2=new Thread(Method2);
pulic void Method2(object obj){
...
}
线程是通过委托来实现的,至于使用哪种委托,要看定义方法是否带参数。如果定义的方法不带参数,就自动用ThreadStart类型的委托调用该方法;如果带参数,则自动用ParameterizedThreadStart类型的委托调用该方法。
上面这段代码和下面的代码是等价的:
Thread t1=new Thread(new ThreadStart(Method1));
public void Method1(){
...
}
Thread t2=new Thread(new ParameterizedThreadStart(Method2));
public void Method2(pnkect obj){
...
}
用Thread创建的线程默认前台线程,如果希望将其作为后台程序,可将线程对象的IsBackground属性设置为true
Thread myThread=new Thread(Method1);
myThread.IsBackground=true;
创建线程并设置让其在前台还是后台运行后,即可对线程进行操作,包括启动、停止、休眠、合并等。


启动线程

方法:
t1.Start();//调用不带参数的方法
t2.Start("MyString");//调用带参数的方法

终止或取消线程的执行

第一种方法:设置一个修饰符为volatile的布尔型字段表示需要正常结束该线程,称为 终止线程
public volatile bool shouldStop;
第二种方法是在其它线程中调用Thread的Abort()方法。这是非正常终止,称为 取消线程的执行(不是销毁线程!!!)。但这种方式可能会导致某个工作执行到一半就结束了。


休眠线程

Thread.Sleep(1000);//线程暂停1s

获取或设置线程优先级

创建线程时,默认优先级为Normal。如果想让一些重要线程优先执行,可以使用下面的方法:
Thead t1=new Thread(MethodName);
t1.priority=ThreadPriority.AboveNoveNormal;
注意当把某个线程优先级设置为最高时,该线程结束前,其它线程都无法获得执行机会,所以使用要小心,除非该任务必须处理,否则不要使用最高优先级。
大家可以买一本C#网络应用编程来看,马俊主编的那本,不是做广告,是觉得真心不错,我提到的只是简单的线程知识,在案例中会用到,还有C#中的任务Task也会用到,这方面只是比较多,希望大家可以自己查一查,下一篇直接上服务器端代码了。

猜你喜欢

转载自blog.csdn.net/specialshoot/article/details/51379076