这种处理本身是协议所规定的,完全可以自行确定。一、假设消息包中有信息可以区分出来源线程。
那么你在接收端在收到这些消息之后可以根据消息中的相应字段区分出来源的线程;二、假设消息包中无法进行区分
那么最好的方法是在线程发送时采取一睦措施进行同步。
比如:private object SyncObject = new object();private void RunThread1()
{
lock(SyncObject)
{
Send(Msg1);
Send(Msg2);
}
}private void RunThread2()
{
lock(SyncObject)
{
Send(Msg3);
Send(Msg4);
}
}这样你的两个线程通过某种方式进行了同步,要么线程1先获得发送权(锁定了SyncObject对象),那么在线程1发送完Msg1和Msg2之前,线程2将停留在lock(SyncObject)的位置上等待。
那么你在接收端在收到这些消息之后可以根据消息中的相应字段区分出来源的线程;二、假设消息包中无法进行区分
那么最好的方法是在线程发送时采取一睦措施进行同步。
比如:private object SyncObject = new object();private void RunThread1()
{
lock(SyncObject)
{
Send(Msg1);
Send(Msg2);
}
}private void RunThread2()
{
lock(SyncObject)
{
Send(Msg3);
Send(Msg4);
}
}这样你的两个线程通过某种方式进行了同步,要么线程1先获得发送权(锁定了SyncObject对象),那么在线程1发送完Msg1和Msg2之前,线程2将停留在lock(SyncObject)的位置上等待。
1:在接收端重新排列消息,还原顺序。但这就要求在你的消息的某个地方必然能够确定来源线程;2:在发送端确定发送顺序。除了使用线程间的同步,其它方案只会更复杂。
比如:
*用事件等方式通知其它线程已经发送完成,其实这类似于锁定;
*使用一个线程发送。