回覆列表
  • 1 # eoelk39951

    如果是系統丟擲的,那麼,可以用tryexceptend;來捕捉。如果是自定義的異常,應該用raise來丟擲。異常類必須繼承於Exception類。比如:ESomeException = class(Exception)下面是delphi 7 中 ForceDirectories函式丟擲異常的方式rceDirectories(Dir: string): Boolean;var E: EInOutError;begin Result := True; if Dir = "" then begin E := EInOutError.CreateRes(@SCannotCreateDir); E.ErrorCode := 3; raise E; //這裡,如果傳入的目錄路徑為空,則丟擲異常E,E就可以是你自己定義的異常型別 end; Dir := ExcludeTrailingPathDelimiter(Dir);{$IFDEF MSWINDOWS} if (Length(Dir)

  • 2 # 使用者1118065681947

    在Delphi中使用執行緒,當窗體關閉時,如果窗體中啟用了執行緒,一般需要手動關閉,以釋放資源。 常用來結束執行緒的程式碼為:

    thread.Terminate;

    thread.WaitFor;

    即先觸發Terminate方法,然後等待執行緒的結束。這種方法要求執行緒不能使用

    FreeOnTerminate := True;

    否則在WaitFor即將結束的時候會引發“無效控制代碼”的錯誤。 這種方法在窗體關閉的時候會等待一段事件(因為WaitFor)。

    因此,如果不是在主窗體中結束執行緒時,其實我們可以不必使用WaitFor。而是採用如下方法: 將FreeOnTerminate := True;這樣在窗體關閉的程式碼中直接呼叫

    thread.Terminate; 即可。

    注意: 如果設定了 thread.OnTerminate := SomeFunction; 那麼在呼叫PcmThrd.Terminate;前儘量將thread.OnTerminate := nil,以免結束執行緒後SomeFunction中的變量出現空指標錯誤。當然,這不是絕對的,需要根據具體程式而定 .

  • 中秋節和大豐收的關聯?
  • 炎熱的夏天,你會想讓自己的女朋友or老婆穿的很清涼上街嗎?