父线程中: while (testingSSD.IsWatchingITS) { data = null; bytes = new Byte[1024]; bytesRec = handler.Receive(bytes); data = Encoding.ASCII.GetString(bytes, 0, bytesRec); if (string.IsNullOrEmpty(data)) { data = ""; } breakflag = false; ParseMessageFromITS(data, out breakflag); if (breakflag) { break; }
if (data != "" && testingSSD.TestResult == SSDTestResult.SYNC && !GlobalVariables.BlockSyncWaitFalg) { try { GlobalVariables.BlockSyncWaitFalg = true; BlockSyncClass bsc = new BlockSyncClass(); bsc.SetSlave(0, Convert.ToInt16(testingSSD.SLot) - 1); blocksyncthread = new Thread(new ThreadStart(bsc.BlockSyncThreadEnter)); blocksyncthread.Name = "BlockSyncThread_" + testingSSD.SLot + "_" + testingSSD.TestBlockName; blocksyncthread.Start(); Thread.Sleep(3000); bsc = null; addlog(...); } catch (Exception eeex) { addlog(...); } } } 子线程: private int _slave = 0; private int _idx = -1; public void SetSlave(int _slv, int _id) { _slave = _slv; _idx = _id; } public void BlockSyncThreadEnter() { try { if (...) StartSyncBlockTest(); else if (..) StartSyncBlockTest_PCIE(); } catch(Exception e) { addlog(...); } } private void StartSyncBlockTest_PCIE() { while (true) { ............ } }大体就是这样的code,具体的就不贴了,太多了。
应该不是,如果冲突,不也应该出错么code打印了某个log后,就不再打印了,不知道为啥
while (testingSSD.IsWatchingITS)
{
data = null;
bytes = new Byte[1024];
bytesRec = handler.Receive(bytes);
data = Encoding.ASCII.GetString(bytes, 0, bytesRec);
if (string.IsNullOrEmpty(data)) { data = ""; }
breakflag = false;
ParseMessageFromITS(data, out breakflag);
if (breakflag) { break; }
if (data != "" && testingSSD.TestResult == SSDTestResult.SYNC && !GlobalVariables.BlockSyncWaitFalg)
{
try
{
GlobalVariables.BlockSyncWaitFalg = true;
BlockSyncClass bsc = new BlockSyncClass();
bsc.SetSlave(0, Convert.ToInt16(testingSSD.SLot) - 1);
blocksyncthread = new Thread(new ThreadStart(bsc.BlockSyncThreadEnter));
blocksyncthread.Name = "BlockSyncThread_" + testingSSD.SLot + "_" + testingSSD.TestBlockName;
blocksyncthread.Start();
Thread.Sleep(3000);
bsc = null;
addlog(...);
}
catch (Exception eeex)
{
addlog(...);
}
}
}
子线程:
private int _slave = 0;
private int _idx = -1; public void SetSlave(int _slv, int _id)
{
_slave = _slv;
_idx = _id;
} public void BlockSyncThreadEnter()
{
try
{
if (...)
StartSyncBlockTest();
else if (..)
StartSyncBlockTest_PCIE();
}
catch(Exception e)
{
addlog(...);
}
} private void StartSyncBlockTest_PCIE()
{
while (true)
{
............
}
}大体就是这样的code,具体的就不贴了,太多了。
我同时开16个线程,4个一组;每个线程中间根据需要会开子线程,然后中间启动子线程的时候有时会莫名停下来;其他组的线程还是正常测试
所以测试下来可能是全成功,也可能是3组成功,另一组停在某个地方就不动了,没有error报出
addlog方法是否线程安全?
打印日志都有try处理的。