我正在使用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);
}
任何人都可以建议我如何使上述程序线程安全或使用计时器?
提前致谢。