首页新闻找找看学习计划

线程同步问题,一个线程不同时间调用多个方法

0
悬赏园豆:20 [待解决问题]

如下:

Thread1做以下工作:1、Init()方法;2、Do()方法;3、...;4、...等等,都是不同时间调用的

所以Thread1线程只能new一次,不能销毁,常驻内存!

怎么设计,怎么做,给具体步骤,谢谢

成群的主页 成群 | 初学一级 | 园豆:160
提问于:2016-09-30 11:16
< >
分享
所有回答(3)
0

看着好像做服务比较合适?

顾晓北 | 园豆:9534 (大侠五级) | 2016-09-30 11:29
0

根据你的问题的描述,你的目的估计是这样子的:

有一个工作流程,这个工作流程有很多个步骤。

你想要一个 类似工人的线程 一直在做社个事情 。这个工人是不能休息的,它得随时起来待命。

是这个样子么?

如果想要完成这样子的想法,你让一个线程常驻内存,这样子的设计确实有点拙劣,其实还有更好的设计

田麦成 | 园豆:1982 (小虾三级) | 2016-09-30 11:30

能说说具体怎么常驻内存,怎么做?

支持(0) 反对(0) 成群 | 园豆:160 (初学一级) | 2016-09-30 11:40

@成群: 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication4
{
    class Program
    {

        /// <summary>
        /// 定义一个全局变量,给Timer传递 控制 参数
        /// </summary>
        public static volatile string GlobalString = "";

        /// <summary>
        /// 定义一个Timer,timer其实是一个常驻内存的线程,我们只需要稍加修改一下它就OK了
        /// </summary>
        public static System.Timers.Timer timer = new System.Timers.Timer();
        static void Main(string[] args)
        {
            timer.Interval = 1000;
            timer.Elapsed += timer_Elapsed;
            timer.Enabled = false;
            timer.Start();
            Console.ReadKey();
        }

        static void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {

            //传递不同的控制参数就可以实现不同的控制
            if (GlobalString=="Init")
            {
                
            }
            else if (GlobalString == "Do")
            {
                
            }
            else if (GlobalString=="End")
            {
                
            }
            else
            {
                Console.WriteLine("现在执行谁?");
            }
        }


    }
}
支持(0) 反对(0) 田麦成 | 园豆:1982 (小虾三级) | 2016-09-30 11:59
0

ConcurrentQueue<Action> jobs=new ...;

 

 

var td=new Thread(()=>{

while(true){

Action task;

if(jobs.TryDequeue(out task))

{

 task();

}

else

{

 Thread.Sleep(1);

}

}

});

td.Start();

 

Daniel Cai | 园豆:10374 (专家六级) | 2016-09-30 11:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册