Ejemplo n.º 1
0
            internal void BtThreadFunc()
            {
                CMtSync p = mBtSync;

                for (;;)
                {
                    Event_Wait(p.mCanStart);
                    Event_Set(p.mWasStarted);

                    uint blockIndex = 0;
                    for (;;)
                    {
                        if (p.mExit)
                        {
                            return;
                        }

                        Trace.MatchObjectWait(p, "BtThreadFunc:stop");
                        if (p.mStopWriting)
                        {
                            Trace.MatchObjectWait(p, "BtThreadFunc:stop");
                            p.mNumProcessedBlocks = blockIndex;
                            mHashSync.MtSync_StopWriting();
                            Event_Set(p.mWasStopped);
                            break;
                        }
                        Trace.MatchObjectWait(p, "BtThreadFunc:stop");

                        Semaphore_Wait(p.mFreeSemaphore);
                        BtFillBlock(blockIndex++);
                        Semaphore_Release1(p.mFilledSemaphore);
                    }
                }
            }
Ejemplo n.º 2
0
 /* ReleaseStream is required to finish multithreading */
 internal void MatchFinderMt_ReleaseStream()
 {
     mBtSync.MtSync_StopWriting();
 }