⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 benchmarkdialog.h

📁 压缩软件源码
💻 H
字号:
// BenchmarkDialog.h

#ifndef __BENCHMARKDIALOG_H
#define __BENCHMARKDIALOG_H

#include "resource.h"

#include "Common/MyCom.h"
#include "Windows/Control/Dialog.h"
#include "Windows/Control/ComboBox.h"
#include "Windows/Synchronization.h"
#include "../../../ICoder.h"

const int kNumBenchDictionaryBitsStart = 21;

struct CProgressInfo
{
  UINT64 InSize;
  UINT64 OutSize;
  UINT64 Time;
  void Init()
  {
    InSize = 0;
    OutSize = 0;
    Time = 0;
  }
};

class CProgressSyncInfo
{
  bool Stopped;
  bool Paused;
public:
  bool Changed;
  UINT32 DictionarySize;
  bool MultiThread;
  UINT64 NumPasses;
  UINT64 NumErrors;
  NWindows::NSynchronization::CManualResetEvent _startEvent;
  NWindows::NSynchronization::CCriticalSection CS;

  CProgressInfo ApprovedInfo;
  CProgressInfo CompressingInfoPrev;
  CProgressInfo CompressingInfoTemp;
  CProgressInfo CompressingInfo;
  UINT64 ProcessedSize;

  CProgressInfo DecompressingInfoTemp;
  CProgressInfo DecompressingInfo;

  void Init()
  {
    Changed = false;
    ApprovedInfo.Init();
    CompressingInfoPrev.Init();
    CompressingInfoTemp.Init();
    CompressingInfo.Init();
    ProcessedSize = 0;
    
    DecompressingInfoTemp.Init();
    DecompressingInfo.Init();

    Stopped = false;
    Paused = false;
    NumPasses = 0;
    NumErrors = 0;
  }
  void InitSettings()
  {
    DictionarySize = (1 << kNumBenchDictionaryBitsStart);
    MultiThread = false;
  }
  void Stop()
  {
    NWindows::NSynchronization::CCriticalSectionLock lock(CS);
    Stopped = true;
  }
  bool WasStopped()
  {
    NWindows::NSynchronization::CCriticalSectionLock lock(CS);
    return Stopped;
  }
  void Pause()
  {
    NWindows::NSynchronization::CCriticalSectionLock lock(CS);
    Paused = true;
  }
  void Start()
  {
    NWindows::NSynchronization::CCriticalSectionLock lock(CS);
    Paused = false;
  }
  bool WasPaused()
  {
    NWindows::NSynchronization::CCriticalSectionLock lock(CS);
    return Paused;
  }
  void WaitCreating() { _startEvent.Lock(); }
};

class CBenchmarkDialog: 
  public NWindows::NControl::CModalDialog
{
  NWindows::NControl::CComboBox m_Dictionary;
  UINT_PTR _timer;
  UINT32 _startTime;

  bool OnTimer(WPARAM timerID, LPARAM callback);
	virtual bool OnInit();
  void OnRestartButton();
  void OnStopButton();
  void OnHelp();
	virtual void OnCancel();
  bool OnButtonClicked(int buttonID, HWND buttonHWND);
  bool OnCommand(int code, int itemID, LPARAM lParam);

  void PrintTime();
  void PrintRating(UINT64 rating, UINT controlID);
  void PrintResults(
      UINT32 dictionarySize,
      UINT64 elapsedTime, 
      UINT64 size, UINT speedID, UINT ratingID, 
      bool decompressMode = false, UINT64 secondSize = 0);

  UINT32 OnChangeDictionary();
  void OnChangeSettings();
public:
  CProgressSyncInfo _syncInfo;

  CBenchmarkDialog(): _timer(0) {}

  INT_PTR Create(HWND wndParent = 0)
  { 
    return CModalDialog::Create(MAKEINTRESOURCE(IDD_DIALOG_BENCHMARK), wndParent); 
  }
};

void Benchmark(HWND hwnd);

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -