Timer c / s thread.sleep就cpu使用而言

时间:2016-08-04 19:33:56

标签: c# .net multithreading timer thread-safety

我正在使用DMX 512 conroller将十六进制数据发送到带有while (true)循环的3个串行端口,其中我多次使用多个Thread.Sleep(50),这会降低CPU使用率并在几小时后停止工作。

这是我的代码:

public static GO () 
{
    try
    {
        dmx = new Dmx(2, 0);

        Thread mTh1 = new Thread(() => dmx.Start(RGBdata1, RGBdata2, RGBdata3)); 

        Global.tmrStarted = true;  // test it,ok

        mTh1.Start();
    }
}

这是我的启动方法,我将数据发送到3个端口,我多次使用Thread.Sleep()方法:

while (Global.tmrStarted)
{
    Break();
    Thread.Sleep(500); 
    if (m_port == null || m_port.IsOpen == false) return;
    m_port.Write(new byte[] { 0 }, 0, 1);
    SendData();


    Break1();
    Thread.Sleep(500); //uncommect this is you need, test
    if (m_port1 == null || m_port1.IsOpen == false) return;
    m_port1.Write(new byte[] { 0 }, 0, 1);
    SendData1();
    Break2();
    Thread.Sleep(500); //uncommect this is you need, test

    if (m_port4 == null || m_port4.IsOpen == false) return;
    m_port4.Write(new byte[] { 0 }, 0, 1);
    SendData2();

    Thread.Sleep(100);
}

任何人都可以建议我如何使上述程序线程安全或使用计时器?

提前致谢。

0 个答案:

没有答案