Tôi đang làm việc với API PostgreSQL C. Đọc các documentation nó nói rằng một truy vấn được hoàn thành khi PQgetResult trả về NULL và PQgetResult sẽ chặn nếu PQisBusy không trở về 0. Tuy nhiên PQisBusy trả về 1 nếu không có đầu vào nhiều hơn, vì vậy tôi không thể gọi PQgetResult và nhận được NULL. Vì vậy, tôi không thể biết nếu truy vấn kết thúc. Có cách nào khác để biết nếu truy vấn được thực hiện? Tôi có hiểu nhầm API async không?API Postgres Async phát hiện kết thúc truy vấn
---- chỉnh sửa -----
Ý tưởng cơ bản là mã C là:
PQsendQuery(conn, query)
while(true)
{
PQconsumeInput(conn)
if(PQisBusy(conn) == 0)
{
PGresult* res = PQgetResult(conn);
if(res)
{
//print result
}
else
{
//res == NULL
//indicates query is over
break;
}
}
}
Kết quả sẽ được in nhưng vòng lặp không bao giờ chấm dứt. Bởi vì PQisBusy chỉ trả về 0 một lần.
Nó có thể là giá trị cho thịt này ra với mã cho thấy những gì bạn đang làm. –
Tôi nghĩ rằng PQgetResult kiểm tra và đợi tín hiệu bận trước khi trả về kết quả. Vì vậy, có thể không yêu cầu nếu (PQisBusy (conn) == 0) kiểm tra ở tất cả. –
@MuhammadUsama điểm của mã là nó có thể không bao giờ chặn, do đó không đồng bộ. Tôi biết rằng làm I/O không đồng bộ trong một vòng lặp bận là vô nghĩa nhưng tôi cần một ví dụ tối thiểu. – JustMaximumPower