示例#1
0
        private void SendData(ComputationData[] level)
        {
            for (int j = 0; j < level.Length; j++)
            {
                ComputationData  cData  = level[j];
                ComputationBlock cBlock = cData.computationBlock;
                cBlock.SetOperands(computationResults[cData.operandAName], computationResults[cData.operandBName]);

                if (availableProcesses.Count > 0)
                {
                    int processRank = availableProcesses.Dequeue();
                    SendMessage(Message.BlockSend, processRank);
                    communicator.Send(cBlock, processRank, 0);
                    busyProcesses.Enqueue(new KeyValuePair <int, ComputationData>(processRank, cData));
                }

                else
                {
                    DisplayOperation(cData.blockName, cData.operandAName, cData.operandBName, cBlock.operandA, cBlock.operandB);
                    Matrix result = cBlock.Execute();
                    DisplayResult(cData.blockName, result);
                    SaveResult(cData.blockName, result);
                }
            }
        }