コード例 #1
0
            public DaemonRT(DaemonDto dto, string root, int delay)
            {
                this.delay = delay;
                this.dto   = dto.Clone();

                using (var disposer = new Disposer())
                {
                    process = new DaemonProcess(new DaemonProcess.Args
                    {
                        Executable = PathTools.Combine(root, dto.Path),
                        //id matches [a-zA_Z][a-zA_Z0-9_]*
                        Arguments = string.Format("Id={0} Daemon=True {1}", dto.Id, dto.Args),
                    });
                    disposer.Push(process);

                    status = "Starting...";

                    reader = new Runner(new Runner.Args {
                        ThreadName = string.Format("DAEMON_{0}_{1}_O", dto.Id, process.Id)
                    });
                    erroer = new Runner(new Runner.Args {
                        ThreadName = string.Format("DAEMON_{0}_{1}_E", dto.Id, process.Id)
                    });
                    disposer.Push(erroer);

                    disposer.Push(Dispose); //ensure cleanup order
                    erroer.Run(ErrorLoop);
                    reader.Run(ReadLoop);
                    reader.Run(UpdateRestart);
                    disposer.Clear();
                }
            }