public override void Compress() { try { initializePlan(); initializeCompressing(); Thread processThread = new Thread(consumeRawFilePart); processThread.Start(); Thread writeThread = new Thread(writeCompressedParts); writeThread.Start(); using (var reader = new FileStream(m_inputFile, FileMode.Open, FileAccess.Read, FileShare.None, c_blockSize)) { byte[] buffer = new byte[c_blockSize]; int blockIndex = 0; int readByteCount = 0; while ((readByteCount = reader.Read(buffer, 0, c_blockSize)) > 0) { using (MemoryStream memStream = new MemoryStream()) { memStream.Write(buffer, 0, readByteCount); FilePart filePart = new FilePart(memStream.ToArray(), blockIndex); m_rawBlockQueue.Enqueue(filePart); } blockIndex++; } } writeThread.Join(); } catch (Exception ex) { throw new Exception("Error was occured in compress method"); } }
public ThreadPool() { m_workers = new BlockingFixedQueue <Thread>(MaxThreads); for (var i = 0; i < MaxThreads; ++i) { var worker = new Thread(Worker) { Name = string.Concat("Worker ", i) }; worker.Start(); m_workers.Enqueue(worker); } }