Skip to content

中文 wiki

ps147258 edited this page Mar 24, 2018 · 7 revisions

歡迎來到 FileHash wiki!

關於本 FileHash

目前有 C++Builder 與 Delphi 這兩種版本的原始碼可以用來對照,裡面有使用 JVCL 元件。
除了 CRC32 以外所有雜湊使用 Delphi 中的演算法,有 MD5、SHA1、SHA224、SHA256、SHA384、SHA512、SHA512_224 及 SHA512_256。

FileHash main from

FileHash 編譯後的 .exe 載點:

使用的 JVCL 元件為 JvFilenameEdit、TJvgProgress 與 TJvThread。
JVCL 3.49 與 JCL 2.7 Build5676 可於 SourceForge project JVCL 中下載。

  • JvFilenameEdit
    更方便的檔案路徑輸入框,並且可以使用彈出式對話框來選取檔案。
  • TJvgProgress
    更詳細與反應更及時的進度條。
  • TJvThread
    可以更簡單的使用多執行續。

這兩個範例以多執行緒來計算 Hash,並且使用簡單的記憶體空間作為緩衝區,使得讀取與計算可以同時進行。

關於使用 TJvThread 中的 WaitFor,由於 WaitFor 裡有呼叫 Application.HandleMessage 這個主執行續的部分,所以 TJvThread.WaitFor 不可以用於 TJvThread.Execute 中,否則會造成兩個執行續卡死,TJvThread.WaitFor 只能用在主執行緒中。

想要在 TJvThread.Execute 中使用,那可以改成:

  while JvThread.OneThreadIsRunning do
    Sleep(1); // 可以依據執行效率來修改這裡的等待時間。

雖然範例是寫:
  repeat
    Sleep(1);
  until JvThread.Terminated;

所以主要流程大概就是這樣:
主執行續,開始進行雜湊運算 // 訊息處理
.. // …
.. 子執行緒,開始 // 這個區塊是處理與等待所有雜湊運算
.. While if not set terminated do // 循環迴圈
.. {
…. 讀取資料
…. 建立所有個別雜湊的區塊運算執行緒,並執行所有建立的執行緒
…. [
…… 建立與執行雜湊執行緒 CRC // 這個是區塊雜湊計算的執行緒
…… 建立與執行雜湊執行緒 MD5 // 這個是區塊雜湊計算的執行緒
…… // 其他雜湊執行緒
…. ]
…. 等待所有雜湊執行緒執行結束
.. }
.. 子執行緒,結束
.. // …
主執行續,結束雜湊運算 // 訊息處理

Clone this wiki locally