一个简单的实时处理机,RealTime+WebServices

说这个实时处理机简单,主要是因为开设的几个线程都是单一的。他们之间无互相通信。所以相对很简单。
不过每一个线程直接调用了一个独立类似的过程,所以这里就用委托代替。启动线程用一个简单的类封装。下面是封装代码:

using System;
using System.Threading;

namespace TRealTime
{
    
/// <summary>
    
/// TopWork 的摘要说明。
    
/// </summary>

    public class TopWork
    
{
        
//直接调用这些方法,可以用一个参数
        public delegate String DelegateRealTimeWebMethod();
        
public delegate void DelegateSendLog(String msg,TRealTime.MainForm.LogFlag lf);
        
public delegate void DelegateWork(TopWork t);

        
public TopWork()
        
{
            
//
            
// TODO: 在此处添加构造函数逻辑
            
//
        }


        
public TopWork(DelegateRealTimeWebMethod m,int threadIndex,int sleepLong)
        
{
            RealTimeWebMethod 
= m;
            ThreadIndex       
= threadIndex;
            SleepLong         
= sleepLong;
        }


        
/// <summary>
        
/// 默认运行中
        
/// </summary>

        private bool threadFlag = true;
        
public bool ThreadFlag
        
{
            
get
            
{
                
lock(this)
                
{
                    
return threadFlag;
                }

            }


            
set
            
{
                
lock(this)
                
{
                    threadFlag 
= value;
                }

            }

        }


        
/// <summary>
        
/// 委托方法
        
/// </summary>

        DelegateSendLog n;
        
/// <summary>
        
/// 委托方法
        
/// </summary>

        public DelegateSendLog DelSendLog
        
{
            
get{return n;}
            
set{n = value;}
        }


        
/// <summary>
        
/// 委托方法
        
/// </summary>

        DelegateRealTimeWebMethod m;
        
/// <summary>
        
/// 委托方法
        
/// </summary>

        public DelegateRealTimeWebMethod RealTimeWebMethod
        
{
            
get{return m;}
            
set{m = value;}
        }


        
/// <summary>
        
/// 线程索引
        
/// </summary>

        private int threadIndex = 1;
        
/// <summary>
        
/// 线程索引
        
/// </summary>

        public int ThreadIndex
        
{
            
get{return threadIndex;}
            
set{threadIndex = value;}
        }


        
/// <summary>
        
/// 睡眠时间
        
/// </summary>

        private int sleepLong = 1000;
        
/// <summary>
        
/// 睡眠时间
        
/// </summary>

        public int SleepLong
        
{
            
get{return sleepLong;}
            
set{sleepLong = value;}
        }


        
public void Run()
        
{
            String Msg 
= String.Empty; 

            DelSendLog(
"启动线程" + ThreadIndex, TRealTime.MainForm.LogFlag.Normal);

            
while(ThreadFlag)
            
{
                
try
                
{
                    Msg 
= RealTimeWebMethod();                
    
                    
if(Msg != null && Msg.Length > 0)
                        DelSendLog(Msg, TRealTime.MainForm.LogFlag.Normal);

                    Thread.Sleep(SleepLong);
//休息1秒
                }

                
catch(ThreadAbortException e)
                
{
                    DelSendLog(e.Message, TRealTime.MainForm.LogFlag.Warn);
                }

            }


            DelSendLog(
"停止线程" + ThreadIndex,  TRealTime.MainForm.LogFlag.Warn);
        }

    }

}

下面是启动线程调用:

            //启动线程1
            T1.RealTimeWebMethod = new TRealTime.TopWork.DelegateRealTimeWebMethod(RT.RealTimeWebMethod1);
            T1.DelSendLog        
= new TRealTime.TopWork.DelegateSendLog(SendLog);
            T1.ThreadIndex       
= 1;
            T1.SleepLong         
= 2000;

            T1.ThreadFlag 
= true;
            thread1 
= new Thread(new ThreadStart(T1.Run));
            thread1.IsBackground
=true;
            thread1.Start();

代码基本大意这个样子,如果有其他不明白的地方,可以给我来email

posted on 2004-08-25 08:37  停留.Xp  阅读(751)  评论(0编辑  收藏  举报

导航