我正在异步打开ADOQuery,它可以按预期工作,但是任何异常都会导致应用程序挂起。异常不会传递回主线程。
ClassNameA
答案 0 :(得分:1)
在异步模式下,您可以在OnExecuteComplete
对象的TADOConnection
事件处理程序中捕获错误。您可以使用EventStatus
和Error
对象来确定是否存在问题。 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);