Ejemplo n.º 1
0
        private static void ToTextFile(OrderedSeq s, string fileName, int outputLen)
        {
            using (StreamWriter w = new StreamWriter(fileName))
            {
                using (ManualResetEvent mre = new ManualResetEvent(true))
                {
                    bool flag = true;

                    WriteToFileParam[] parameters = new WriteToFileParam[2];
                    parameters[0] = new WriteToFileParam(outputLen, w, mre, 0);
                    parameters[1] = new WriteToFileParam(outputLen, w, mre, 1);
                    int currentParam = 0;
                    int[] buffer = parameters[currentParam].buffer;
                    int j = 0;
                    while (flag)
                    {
                        int fromPos = s.fromPos;
                        int finalToPos = s.toPos;
                        while (fromPos < finalToPos)
                        {
                            int sz = Math.Min(outputLen - j, finalToPos - fromPos);
                            int intermToPos = fromPos + sz;
                            for (int i = fromPos; i < intermToPos; i++)
                            {
                                buffer[j++] = s.data[i];
                            }
                            fromPos += sz;
                            if (j >= outputLen)
                            {
                                //write to file
                                WriteOnThread(parameters[currentParam]);
                                currentParam = (currentParam + 1) % 2;
                                buffer = parameters[currentParam].buffer;
                                j = 0;
                            }
                        }
                        flag = s.ReplaceWithRest();
                    }
                    if (j > 0)
                    {
                        //write to file
                        parameters[currentParam].len = j;
                        WriteOnThread(parameters[currentParam]);
                    }
                    mre.WaitOne();
                    parameters[0].w = null; parameters[0].mre = null;
                    parameters[1].w = null; parameters[1].mre = null;

                }
                w.Close();
            }
        }
Ejemplo n.º 2
0
 private static void WriteOnThread(WriteToFileParam param)
 {
     param.mre.WaitOne();//wait for previous thread to complete
     param.mre.Reset();
     ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProcIntsToFile), param);
 }
Ejemplo n.º 3
0
        private static void IntsToFile(WriteToFileParam param)
        {
            StreamWriter w = param.w;
            int[] data = param.buffer;
            char[] charBuffer = param.charBuffer;
            int len = param.len;
            for (int i = 0; i < len; i++)
            {
                int j = IntToCharBuffer(data[i], charBuffer);
                charBuffer[j++] = '\r';
                charBuffer[j++] = '\n';
                for (int k = 0; k < j; k++)
                    w.Write(charBuffer[k]);

            }
        }