C#.net同步异步SOCKET通讯和多线程总结(15)
}
Catch(Exception ee){}
线程target
Private void target()
{
While(true)
{
myReset.Reset();
mysocket.BeginAccept(new AsyncCallBack(AcceptCallback),mysocket);
myReset.WaitOne();
}
}
异步回调方法AcceptCallBack
Private void AcceptCallback(IAsyncResault ar)
{
myReset.Set();
Socket Listener=(Socket)ar.AsyncState;
Handler=Listener.EndAccept(ar);
StateObject state=new StateObject();
State.workSocket=handler;
Try
{
Byte[] byteData=System.Text.Encoding.BigEndianUnicode.GetBytes(“通话!”+”/n/r”);
Handler.BeginSend(byuteData,0,byteData.Length,0,new AsyncCallback(SendCallback),handler);
}
Catch(Exception ee)
{MessageBox.Show(ee.Message);}
Thread thread=new Thread(new ThreadStart(begreceive));
Thread.Start();
}
多线程:
每个窗体自己都在不同的线程上面运行,如果需要在窗体之间交互,需要在线程之间交互
当线程sleep,系统就使之退出执行队列,当睡眠结束,系统产生时钟中断,使该线程回到执行队列中,回复线程的执行。
如果父线程先于子线程结束,那么子线程在父线程结束的时候被迫结束,Thread.Join()是父线程等待子线程结束。Abort带来的是不可回复的终止线程
起始线程为主线程,前台线程全部结束,则主线程可以终止,后台线程无条件终止。
前台线程不妨碍程序终止,一旦进程的所有前台线程终止,则clr调用任意一个还存活的后台线程的abort来彻底终止进程。
挂起,睡眠(阻塞,暂停)
Thread.Suspend不会使线程立即停止执行,直到线程到达安全点的时候它才可以将该线程挂起,如果线程尚未运行或这已经停止,则不能被挂起,调用thread.resume使另一个线程跳出挂起状态,继续执行。
一个线程不能对另一个线程调用sleep,但是可以suspend。
Lock可以把一段代码定义为互斥段critical section 互斥段在一个时刻内只允许一个线程进入执行,其他线程必须等待
多线程公用对象,不应该使用lock,monitor提供了线程共享资源的方案,monitor可以锁定一个对象,线程只有得到锁才可以对该对象进行操作
一个进程开始至少有一个主线程。系统加载程序时创建主执行线程
消息队列与线程相关
一开始创建线程就产生消息队列了,一个线程可以创建多个窗体,而发给这些窗体的消息都同意发送到同一个消息队列中了,消息结构中有msg.hwnd指出该条消息与哪个窗体相关
DispatchMessage()函数依照这个保证消息分派处理自动化而且不会出错。
线程控制方法:
Start线程开始运行
Sleep 是线程暂停一段指定时间
Suspend 线程在到达安全点后暂停
Abort 线程到达安全点后停止
Resume 重新启动挂起的线程
Join 当前线程等待其他线程运行结束。如果使用超时值,且线程在分配的时间内结束,方法返回true
相关新闻>>
- 发表评论
-
- 最新评论 更多>>