QueryPerformanceFrequency() private method

private QueryPerformanceFrequency ( long &lpFrequency ) : bool
lpFrequency long
return bool
Example #1
0
        void WorkThread()
        {
            long startTime, endTime, freq;

            Win32Wrapper.QueryPerformanceFrequency(out freq);
            double dfFreq = 1.0 / (double)freq;

            while (true)
            {
                if (mDoWork)
                {
                    uint hashesRemaining = mHashCount - mHashesDone;
                    uint numHashes       = Math.Min(hashesRemaining, cHashChunk);

                    uint start = mHashStart + mHashesDone;

                    Win32Wrapper.QueryPerformanceCounter(out startTime);
                    uint hashesDone = DoHashes(start, numHashes);
                    Win32Wrapper.QueryPerformanceCounter(out endTime);
                    double seconds = (double)(endTime - startTime) * dfFreq;
                    mHashrate = (double)hashesDone / seconds;

                    mHashesDone += hashesDone;
                    if (mHashesDone >= mHashCount)
                    {
                        // Done, didnt find a solution
                        SendWorkComplete(false, 0, mHashesDone);
                    }
                }
            }
        }
Example #2
0
        void DoWork(WorkBlock work)
        {
            byte[] data = new byte[64];
            Array.Copy(work.data, 64, data, 0, 64);
            uint[] midstate = ByteArrayToUIntArray(work.midstate, 0);

            uint[] targetA       = ByteArrayToUIntArray(work.target, 0);
            uint[] targetSwapped = new uint[8];
            for (int i = 0; i < 8; i++)
            {
                targetSwapped[i] = targetA[7 - i];
            }

            uint max = 0xFFFFFFFF;
            long start, end, freq;

            Win32Wrapper.QueryPerformanceFrequency(out freq);
            Win32Wrapper.QueryPerformanceCounter(out start);
            for (uint n = 0; n < max; n++)
            {
                WriteUIntToByteArray(n, data, 12);

                uint[] output = new uint[8];
                SHATransform(output, data, midstate);

                byte[] input = new byte[64];
                Buffer.BlockCopy(output, 0, input, 0, 32);
                Buffer.BlockCopy(work.hash1, 32, input, 32, 32);
                SHATransform(output, input, staticData);

                if (output[7] == 0)
                {
                    uint[] swapped = new uint[8];
                    for (int i = 0; i < 8; i++)
                    {
                        swapped[i] = Program.Byteswap(output[7 - i]);
                    }

                    for (int i = 1; i < 8; i++)
                    {
                        if (swapped[i] < targetSwapped[i])
                        {
                            // Found a solution
                            WriteUIntToByteArray(n, work.data, 76);     // Write the nonce value into the data block
                            return;
                        }

                        if (swapped[i] > targetSwapped[i])
                        {
                            break;
                        }
                    }
                }
            }

            Win32Wrapper.QueryPerformanceCounter(out end);
            long   clocks          = end - start;
            double seconds         = (double)clocks / (double)freq;
            double hashesPerSecond = max / seconds;

            Console.WriteLine(hashesPerSecond.ToString() + " hashes per second");
        }