日期:2014-05-17  浏览次数:20774 次

c# 多线程通信问题,高手请进哦!!
最近一直在研究多线程通信这方面的问题,正在学习中,遇到了一些问题,请各位高手赐教……
问题如下:
想实现客户端和服务器通信,
一个客户端向许多不同的服务器请求,
其中,客户端向服务器请求用的是多线程

我不会的部分是:
1. 要求客户端向服务器请求超过10秒后自动结束本线程
2. 如何判断客户端的所有线程都结束了?(我想做的是等所有线程都结束了,再继续执行主程序中下面的代码)

刚刚接触c# 多线程和通信这方面的内容,望各位前辈多多指教,小女子在此谢过了!


------最佳解决方案--------------------
小女子?没图没真相阿。。。好吧我就爱帮助小姑娘
线程超时设置一般最好控制在17毫秒以上,因为一个cpu时钟是16毫秒,一个线程一个类,只是部分代码,大概思路在里面了



internal delegate void ThreadOverDelegate(string threadClassID);

/// <summary>
    /// 线程执行类
    /// </summary>
    internal class ThreadClass<T> where T:IMsg 
    {
        //识别ID
        string threadClassID = string.Empty;
        //处理消息事件
        private event MessageQueue<T>.MsgDealDelegate MsgDealEvent;
        private event ThreadOverDelegate ThreadOverEvent;
        //超时计数器
        private readonly System.Timers.Timer timer = new System.Timers.Timer();
        //线程同步
        private readonly AutoResetEvent thread_startEvent = new AutoResetEvent(false);
        //线程锁
        private readonly object thread_msgLock = new object();
        //超时标记
        public bool isTimeout = false;
        //执行任务线程
        Thread thread;
        //消息数据
        T Msg;

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="_MsgDealEvent">处理消息事件</param>
        internal ThreadClass(string _threadClassID, MessageQueue<T>.MsgDealDelegate _MsgDealEvent, ThreadOverDelegate _ThreadOverEvent)
        {
            threadClassID = _threadClassID;
            MsgDealEvent = _MsgDealEvent;
            ThreadOverEvent = _ThreadOverEvent;
        }

        /// <summary>
        /// 加入任务
        /// </summary>
        /// <param name="msg"></param>
        internal void AddTask(T msg)
      &