void ThreadBoost() { threadData = new List <ThreadDataSet>(); for (int i = 0; i < _THREAD_COUNT; ++i) { ThreadDataSet data = new ThreadDataSet(); Thread t = new Thread(new ParameterizedThreadStart(ThreadFunc)); data.instance = t; data.threadId = i; threadData.Add(data); t.Start(i); } }
void ThreadFunc(object threadId) { int id = (int)threadId; ThreadDataSet data = threadData[id]; while (true) { if (data.isComplete) { Thread.Sleep(3); } else { bufferLock.EnterReadLock(); try { BufferType calDes = BufferType.Buffer1; List <int> _waitForDel = new List <int>(); if (!buffer1Complete && !buffer2Complete) { calDes = BufferType.Buffer1; } else if (buffer1Complete && !buffer2Complete) { calDes = BufferType.Buffer2; } else if (!buffer1Complete && buffer2Complete) { calDes = BufferType.Buffer1; } FduTransformObserver_Ex ob; int obId; for (int i = 0; i < data.processIdList.Count; ++i) { obId = data.processIdList[i]; ob = dataMap[obId].observer; if (ob != null) { //watch out 这里代码写的不好 如果数值修改 这边判断条件也需要改变 if (ob.getObservedState(1)) //pos { setPosBufferData(calDes, obId, FduInterpolationInterface_EX.getNextPosValue_Ex(getPosBufferData(getAnotherBuffer(calDes), obId), ob)); } if (ob.getObservedState(2)) //rot { setRotationBufferData(calDes, obId, FduInterpolationInterface_EX.getNextQuaternionValue_Ex(getRotateBufferData(getAnotherBuffer(calDes), obId), ob)); } if (ob.getObservedState(3)) //scale { setScaleBufferData(calDes, obId, FduInterpolationInterface_EX.getNextScaleValue_Ex(getScaleBufferData(getAnotherBuffer(calDes), obId), ob)); } } else { _waitForDel.Add(data.processIdList[i]); } } foreach (int delId in _waitForDel) { data.processIdList.Remove(delId); } requestDeleteTransformObserver(_waitForDel.ToArray()); //Debug.Log("Cal Des:" + calDes.ToString() + " buffer1 : " + buffer1Complete + " buffer2: " +buffer2Complete + " task amount:" + data.processIdList.Count + " threadId " +id); } finally { data.isComplete = true; bufferLock.ExitReadLock(); testProceeTime++; } } } }