如何阅读CGMiner输出?

时间:2014-01-27 01:43:37

标签: c# cmd bitcoin

我正在尝试在我正在编写的C#程序中读取CGMiner输出。我成功读/写标准线程输入/输出。但由于某些原因,CGMiner没有写入标准cmd窗口输出,我无法在C#中读取它。有什么想法吗?

这是我的流程开始:

    public void start() {
        proc = new Process();
        proc.StartInfo.FileName = "CMD.exe";
        proc.StartInfo.RedirectStandardInput = true;
        proc.StartInfo.RedirectStandardOutput = true;
        proc.StartInfo.UseShellExecute = false;
        proc.OutputDataReceived += (s, e) => updateConsoleOutput(e);
        proc.Start();
        proc.BeginOutputReadLine(); 
    }

这是我用来写入控制台的功能:

    public void RunCommand(string cmd = "") {
        if (cmd.Length > 0) {
            ConsoleInput = cmd;
        }
        StreamWriter myStreamWriter = proc.StandardInput;
        myStreamWriter.WriteLine(ConsoleInput);
        myStreamWriter.Flush();
        ConsoleInput = String.Empty;
    }

这些是我用来从控制台读取的函数:

    public delegate void consoleOutputCallback(string message);
    private void updateConsoleOutput(DataReceivedEventArgs outLine) {
        if (!String.IsNullOrEmpty(outLine.Data)) {
            this.Dispatcher.Invoke(
                new consoleOutputCallback(updateConsoleText),
                new object[] { outLine.Data }
            );
        }
    }
    public void updateConsoleText(string message) {
        this.OutputBlock.Text += message + "\n";
    }

提示:不知道它是否有帮助,但CGMiner将覆盖整个控制台窗口,并且光标始终保持在左上方而不会移动。运行CGMiner之前的所有命令都会被覆盖。


忘记添加,这是我使用的控制台命令:

cd C:\cgminer\
del *.bin
cgminer.exe -o stratum+tcp://global.wemineltc.com:3335 -O yongke.1:x -g 2

2 个答案:

答案 0 :(得分:0)

您需要设置 - per-device-stats 标志,以便将GPU统计信息写入流

并且不要忘记将添加到相关代码中

proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.RedirectStandardError = true;
proc.ErrorDataReceived += (s, e) => updateConsoleOutput(e);
....
proc.Start();
proc.BeginErrorReadLine();

由于某种原因,大多数矿工使用标准错误流而不是标准输出流(写入输出数据和错误)。

答案 1 :(得分:0)

唯一使它适合我的是

-T

这是我的工作代码

Task StartGPUMiner(object set)
    {
        MinerParams m = new MinerParams();
        m = (MinerParams)set;
        var tcs = new TaskCompletionSource<object>();
        Process p = new Process();
        ProcessStartInfo start = new System.Diagnostics.ProcessStartInfo();
        start.FileName = m.ApplicationPath + "\\cgminer\\cgminer.exe";
        start.Arguments = " -I " + m.GpuIntisity + " -T --scrypt -o " + m.sProtocol + m.ServerName + ":" +  m.ServerPort + " -u " + m.UserName + "." + m.WorkerName + " -p " + m.ThePassword + " " + m.GpuParams;
        start.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        start.RedirectStandardOutput = true;
        start.UseShellExecute = false;
        start.CreateNoWindow = true;

        var proc = Process.Start(start);
        proc.OutputDataReceived += (s, e) =>
        {
            try
            {
                this.Invoke((Action)delegate
                {
                    txtLog.Text += (e.Data + Environment.NewLine);
                });
            }
            catch { }
        };

        try
        {
            proc.Exited += (s, e) => tcs.SetResult(null);
            proc.EnableRaisingEvents = true;
            proc.BeginOutputReadLine();
        }
        catch { }
            return tcs.Task;
}