简单的队列应用
2017-11-30 17:19
239 查看
using Newtonsoft.Json; using System; using System.Collections.Concurrent; using System.Diagnostics; using System.IO; using System.Threading; using System.Web; namespace TestQuenu { /// <summary> /// 文件转码简单队列 /// </summary> public class TransCodQuenuHelp { /// <summary> /// 待转码的文件队列 /// </summary> private static ConcurrentQueue<string> waitTransFileQuene = new ConcurrentQueue<string>(); /// <summary> /// 系列化文件存放位置 /// </summary> private static string waitTransFileSavePath = HttpContext.Current.Server.MapPath("~/1.txt"); /// <summary> /// 等待毫秒数 /// </summary> private const int waitTime = 300000; /// <summary> /// 日志来源 /// </summary> private const string source = ""; /// <summary> /// 日志名称 /// </summary> private const string logName = ""; /// <summary> /// 初始化队列 /// </summary> public static void init() { initLog(); ReadWaitTransFile(); /*开启线程用于定时任务*/ Thread thread = new Thread(new ThreadStart(ListenceTransCode)); thread.Start(); thread.IsBackground = true; } /// <summary> /// 初始化日志 /// </summary> private static void initLog() { if (!EventLog.SourceExists(source)) { EventLog.CreateEventSource(source, logName); } } /// <summary> /// 转码监听 /// </summary> private static void ListenceTransCode() { while (true) { if (!waitTransFileQuene.IsEmpty) { string curTransFile = string.Empty; bool isSuc = waitTransFileQuene.TryDequeue(out curTransFile); if (isSuc) { //转码 try { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); //doSomething(); stopwatch.Stop(); TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间 string msg = string.Format("{0}成功,用时{1}分钟", curTransFile, timespan.TotalMinutes); EventLog.WriteEntry(source, msg, EventLogEntryType.Information); } catch (Exception ex) { EventLog.WriteEntry(source, ex.Message, EventLogEntryType.Error); } } } else { Thread.Sleep(waitTime); } } } /// <summary> /// 从文件中读取未转码的文件列表 /// </summary> private static void ReadWaitTransFile() { if (File.Exists(waitTransFileSavePath)) { string waitTransFile = File.ReadAllText(waitTransFileSavePath); waitTransFileQuene = JsonConvert.DeserializeObject<ConcurrentQueue<string>>(waitTransFile); } } /// <summary> /// 保存未转码的文件类别到文件 /// </summary> public static void SaveWaitTransFile() { if (!waitTransFileQuene.IsEmpty) { File.WriteAllText(waitTransFileSavePath, JsonConvert.SerializeObject(waitTransFileQuene)); } } /// <summary> /// 添加新的任务 /// </summary> /// <param name="fileName">文件全名</param> public static void Add(string fileName) { waitTransFileQuene.Enqueue(fileName); } } }
相关文章推荐
- 2830 蓬莱山辉夜 优先队列的简单应用
- java多线程之阻塞队列BlockingQueue的简单应用
- Buy Tickets hoj 单调队列优化DP的简单应用
- 【算法学习笔记】53.单调队列的简单应用 SJTU OJ 1034 二哥的金链
- Sliding Window poj 单调队列的简单应用
- redis消息队列简单应用
- ActiveMQ的最简单应用-队列消息
- hdu1702ACboy needs your help again!(栈和队列的简单应用)
- Tyvj1305(单调队列简单应用,用list实现)
- notify和wait在消息队列中的简单应用
- 栈与队列的简单应用(C++)
- 简单数据结构(四)栈和队列的简单应用
- 栈和队列的简单应用
- 队列的简单应用
- 队列的简单应用-杨辉三角和约瑟夫环
- 树2. List Leaves(树的遍历,队列的简单应用)
- Queue 队列 写日志简单应用
- HDU 1873 看病要排队(优先队列的简单应用)
- 队列、循环队列、反射的简单应用
- LA3135 优先队列简单应用