Delphi捕获异步ADOQuery异常

时间:2019-03-20 22:42:16

标签: multithreading delphi ado

我正在异步打开ADOQuery,它可以按预期工作,但是任何异常都会导致应用程序挂起。异常不会传递回主线程。

ClassNameA

1 个答案:

答案 0 :(得分:1)

在异步模式下,您可以在OnExecuteComplete对象的TADOConnection事件处理程序中捕获错误。您可以使用EventStatusError对象来确定是否存在问题。 Error.Description会给您数据库服务器返回的错误。

P.S .:请避免在代码中使用Application.ProcessMessages,因为您使用的是异步查询,因此不需要使用procedure TForm1.ADOConnection1ExecuteComplete(Connection: TADOConnection; RecordsAffected: Integer; const Error: Error; var EventStatus: TEventStatus; const Command: _Command; const Recordset: _Recordset); begin if EventStatus = esErrorsOccured then begin memo1.Lines.add(Error.Description); // recover from error here end; end; ,这会导致无法预料的事件重入情况。

示例:

cudaEventCreate(&gpu_execution_start);
cudaEventCreate(&gpu_execution_end);

cudaEventRecord(gpu_execution_start);
kernel<<<n_blocks,blocksize>>> (device_a, device_b, device_out, arraysize);
cudaEventRecord(gpu_execution_end);

cudaEventSynchronize(gpu_execution_end);