-
Notifications
You must be signed in to change notification settings - Fork 2
中文 wiki
歡迎來到 FileHash wiki!
關於本 FileHash
目前有 C++Builder 與 Delphi 這兩種版本的原始碼可以用來對照,裡面有使用 JVCL 元件。
除了 CRC32 以外所有雜湊使用 Delphi 中的演算法,有 MD5、SHA1、SHA224、SHA256、SHA384、SHA512、SHA512_224 及 SHA512_256。
FileHash 編譯後的 .exe 載點:
- 未包含函數庫,需要安裝 開發環境 或 執行階段元件庫(Runtime packages) 才可執行:
32位元版本(155 KB): https://1drv.ms/u/s!AEUDZpCYF5CHhhA
64位元版本(257 KB): https://1drv.ms/u/s!AEUDZpCYF5CHhhE - 包含所有函數庫,可直接在無 開發環境 或 執行階段元件庫(Runtime packages) 下執行:
32位元版本(2.76 MB): https://1drv.ms/u/s!AEUDZpCYF5CHhhM
64位元版本(4.22 MB): https://1drv.ms/u/s!AEUDZpCYF5CHhhI
使用的 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 // 這個是區塊雜湊計算的執行緒
…… // 其他雜湊執行緒
…. ]
…. 等待所有雜湊執行緒執行結束
.. }
.. 子執行緒,結束
.. // …
主執行續,結束雜湊運算 // 訊息處理