ThePQEXECchức năng là đủ cho Gửi truy tỷ lệ kèo bóng đá trực tuyến hôm nay trong các ứng dụng đồng bộ đơn giản. Nó có a Tuy nhiên, một vài thiếu sót lớn:
PQEXECchờ truy vấn hoàn thành. Ứng dụng có thể có công việc khác để làm (chẳng hạn như duy trì giao diện người dùng), trong trường hợp đó nó sẽ tỷ lệ kèo bóng đá trực tuyến hôm nay muốn Khối chờ phản hồi.
Vì điều khiển được chôn bên trongPQEXEC, Frontend khó quyết định Nó muốn cố gắng hủy bỏ truy vấn đang diễn ra. (Nó có thể được được thực hiện từ một trình xử lý tín hiệu, nhưng tỷ lệ kèo bóng đá trực tuyến hôm nay khác.)
PQEXECchỉ có thể trả về một Cấu trúc pgresult. Nếu chuỗi truy tỷ lệ kèo bóng đá trực tuyến hôm nay đã gửi chứa nhiềuSQLCác lệnh, tất cả nhưng pgresult cuối cùng bị loại bỏ bởiPQEXEC.
Các ứng dụng tỷ lệ kèo bóng đá trực tuyến hôm nay thích những hạn chế này có thể sử dụng các chức năng cơ bản màPQEXECđược xây dựng từ:PQSendQueryvàPQGetResult.
Các chương trình cũ hơn sử dụng chức năng này cũng nhưpqputlinevàpqputnbytesCó thể chặn chờ để gửi dữ liệu đến phần phụ trợ, để giải quyết tỷ lệ kèo bóng đá trực tuyến hôm nay đề đó, chức năngpqsetNonblockingđã được thêm vào.
Các ứng dụng cũ có thể bỏ qua việc sử dụngpqsetNonblockingvà có được những người già có khả năng chặn hành vi. Các chương trình mới hơn có thể sử dụngpqsetNonblockingĐể đạt được hoàn toàn Kết nối tỷ lệ kèo bóng đá trực tuyến hôm nay chặn đến phụ trợ.
pqsetNonblockingĐặt Trạng thái tỷ lệ kèo bóng đá trực tuyến hôm nay chặn của kết nối.
int pqsetNonblocking (pgconn *Conn, int arg)Đặt trạng thái của kết nối thành tỷ lệ kèo bóng đá trực tuyến hôm nay chặn nếu Arg là Đúng, chặn nếu Arg là sai. Trả về 0 nếu ok, -1 nếu lỗi.
Ở trạng thái tỷ lệ kèo bóng đá trực tuyến hôm nay chặn, các cuộc gọi đếnpqputline, pqputnbytes, PQSendQueryvàPQENDCOPYsẽ tỷ lệ kèo bóng đá trực tuyến hôm nay chặn mà thay vào đó trở lại một lỗi nếu chúng cần được gọi lại.
Khi kết nối cơ sở dữ liệu đã được đặt thành tỷ lệ kèo bóng đá trực tuyến hôm nay chặn Chế độ vàPQEXECđược gọi, nó sẽ tạm thời đặt trạng thái kết nối để chặn cho đến khi ThePQEXECHoàn thành.
Thêm libpq dự kiến sẽ được làm an toàn chopqsetNonblockingChức năng trong gần tương lai.
pqisnonblockingTrả về Trạng thái chặn của kết nối cơ sở dữ liệu.
int pqisnonblockocking (const pgconn *Conn)Trả về true nếu kết nối được đặt thành chế độ tỷ lệ kèo bóng đá trực tuyến hôm nay chặn, Sai nếu chặn.
PQSendQueryGửi truy tỷ lệ kèo bóng đá trực tuyến hôm nay đếnPostgreswithout waiting for Kết quả (s). Đúng được trả về nếu truy vấn thành công được gửi đi, sai nếu tỷ lệ kèo bóng đá trực tuyến hôm nay (trong trường hợp đó, sử dụng pqerrormessage để có thêm thông tin về sự thất bại).
int pqsendquery (pgconn *Conn, const char *truy tỷ lệ kèo bóng đá trực tuyến hôm nay);Sau khi gọi thành côngPQSendQuery, gọiPQGetResultone or more times to obtain the query kết quả.PQSendQuerycó thể tỷ lệ kèo bóng đá trực tuyến hôm nay được gọi một lần nữa (trên cùng một kết nối) cho đến khiPQGetResultđã trả lại null, chỉ ra rằng Truy tỷ lệ kèo bóng đá trực tuyến hôm nay đã hoàn thành.
PQGetResultĐợi cái tiếp theo kết quả từ trướcPQSendQuery,, và trả lại nó. Null được trả lại khi truy vấn hoàn tất và sẽ tỷ lệ kèo bóng đá trực tuyến hôm nay có kết quả nữa.
PQGetResultphải được gọi liên tục cho đến khi nó trả lại null, cho biết truy vấn là xong. (Nếu được gọi khi tỷ lệ kèo bóng đá trực tuyến hôm nay có truy vấn nào hoạt động,PQGetResultwill just return NULL at once.) Each Kết quả tỷ lệ kèo bóng đá trực tuyến hôm nay phải null từPQGetResultnên được xử lý bằng cách sử dụng cùng một người phụ kiện PGRESULT Các chức năng được mô tả trước đây. Đừng quên giải phóng mỗi đối tượng kết quả vớiPQClearKhi nào thực hiện với nó. Lưu ý rằngPQGetResultSẽ chỉ chặn nếu một truy tỷ lệ kèo bóng đá trực tuyến hôm nay hoạt động và cần thiết Dữ liệu phản hồi chưa được đọc bởiPQConsumeInput.sử dụngPQSendQueryvàPQGetResultgiải quyết một trongPQEXECS tỷ lệ kèo bóng đá trực tuyến hôm nay đề: Nếu chuỗi truy tỷ lệ kèo bóng đá trực tuyến hôm nay chứa nhiềuSQLCác lệnh, kết quả của các lệnh đó có thể được lấy riêng lẻ. (Điều này cho phép a Nhân tiện, hình thức xử lý chồng chéo đơn giản: Frontend có thể xử lý kết quả của một truy tỷ lệ kèo bóng đá trực tuyến hôm nay trong khi phụ trợ là Vẫn làm việc trên các truy tỷ lệ kèo bóng đá trực tuyến hôm nay sau trong cùng một chuỗi truy tỷ lệ kèo bóng đá trực tuyến hôm nay.) Tuy nhiên, gọiPQGetResultsẽ vẫn còn khiến frontend chặn cho đến khi phần phụ trợ hoàn thành tiếp theoSQLlệnh. Điều này có thể tránh được bằng cách Sử dụng đúng ba chức năng:
PQConsumeInputNếu đầu vào là Có sẵn từ phần phụ trợ, tiêu thụ nó.
int pqconsumeinput (pgconn *Conn);PQConsumeInputThông thường trả về 1 biểu thị "tỷ lệ kèo bóng đá trực tuyến hôm nay có lỗi", nhưng trả về 0 nếu có một số loại sự cố (trong trường hợp đópqerrormessageIS bộ). Lưu ý rằng kết quả tỷ lệ kèo bóng đá trực tuyến hôm nay cho biết liệu có bất kỳ dữ liệu đầu vào nào thực sự được thu thập. Sau khi gọiPQConsumeInput, Ứng dụng có thể kiểm trapqisbusyvà/hoặcpqnotifyesĐể xem trạng thái của họ có thay đổi tỷ lệ kèo bóng đá trực tuyến hôm nay.
PQConsumeInputcó thể được gọi ngay cả khi ứng dụng tỷ lệ kèo bóng đá trực tuyến hôm nay được chuẩn bị để đối phó với kết quả hoặc thông báo chỉ là chưa. Thói quen sẽ đọc có sẵn dữ liệu và lưu nó trong bộ đệm, do đó gây raChọn(2) Chỉ dẫn sẵn sàng đọc đi. Do đó ứng dụng có thể sử dụngPQConsumeInputĐể xóaChọnĐiều kiện ngay lập tức, và sau đó Kiểm tra kết quả lúc rảnh rỗi.
pqisbusyTrả về 1 nếu truy tỷ lệ kèo bóng đá trực tuyến hôm nay là bận rộn, đó là,PQGetResultSẽ Chặn đang chờ đầu vào. Trả về 0 chỉ ra rằngPQGetResultCó thể được gọi với sự đảm bảo của tỷ lệ kèo bóng đá trực tuyến hôm nay chặn.
int pqisbusy (pgconn *Conn);pqisbusybản thân nó sẽ tỷ lệ kèo bóng đá trực tuyến hôm nay cố gắng Đọc dữ liệu từ phần phụ trợ; Vì vậyPQConsumeInputphải được gọi trước hoặc bận rộn Nhà nước sẽ tỷ lệ kèo bóng đá trực tuyến hôm nay bao giờ kết thúc.
pqflushcố gắng xả bất kỳ dữ liệu xếp hàng vào phụ trợ, trả về 0 nếu thành công (hoặc nếu Hàng đợi gửi trống) hoặc EOF nếu nó thất bại cho một số lý do.
int pqflush (pgconn *Conn);pqflushcần được gọi trên Kết nối tỷ lệ kèo bóng đá trực tuyến hôm nay chặn trước khi gọiChọnĐể xác định xem có phản hồi nào tỷ lệ kèo bóng đá trực tuyến hôm nay. Nếu 0 được trả lại, nó đảm bảo rằng tỷ lệ kèo bóng đá trực tuyến hôm nay có dữ liệu được xếp hàng vào phần phụ trợ Điều đó chưa thực sự được gửi. Chỉ các ứng dụng đã sử dụngPQSetNonblockingCó nhu cầu về điều này.
PQSocketlấy tệp Số mô tả cho ổ cắm kết nối phụ trợ. Một hợp lệ mô tả sẽ = 0; kết quả của -1 chỉ ra rằng tỷ lệ kèo bóng đá trực tuyến hôm nay Kết nối phụ trợ hiện đang mở.
int pqsocket (const pgconn *Conn);PQSocketnên được sử dụng để có được Bộ mô tả ổ cắm phụ trợ để chuẩn bị thực hiệnChọn(2). Điều này cho phép một ứng dụng Sử dụng kết nối chặn để chờ phản hồi phụ trợ hoặc điều kiện khác. Nếu kết quả củaChọn(2) chỉ ra rằng dữ liệu có thể được đọc từ Ổ cắm phụ trợ, sau đóPQConsumeInputnên được gọi để đọc dữ liệu; sau đó,pqisbusy, PQGetResult,, và/hoặcpqnotifyescó thể được sử dụng để xử lý phản hồi.
Kết nối tỷ lệ kèo bóng đá trực tuyến hôm nay chặn (đã sử dụngpqsetNonblocking) tỷ lệ kèo bóng đá trực tuyến hôm nay nên sử dụngChọncho đếnPQFLUSHđã trả về 0 cho biết ở đó tỷ lệ kèo bóng đá trực tuyến hôm nay có dữ liệu được đệm chờ được gửi đến phụ trợ.
Một mặt trận điển hình bằng cách sử dụng các chức năng này sẽ có một vòng lặp chính sử dụngChọn(2) để chờ tất cả điều kiện mà nó phải đáp ứng. Một trong những điều kiện sẽ là đầu vào có sẵn từ phần phụ trợ, trongChọnCác điều khoản có thể đọc được trên tệp mô tả được xác định bởiPQSocket. Khi Vòng chính phát hiện đầu vào đã sẵn sàng, nó sẽ gọiPQConsumeInputĐể đọc đầu vào. Nó có thể sau đó gọiPQISBusy, theo sau làPQGetResultnếupqisbusyTrả về sai (0). Nó cũng có thể gọipqnotifyesĐể phát hiện thông báo thông báo (xem "Thông báo tỷ lệ kèo bóng đá trực tuyến hôm nay bộ", bên dưới).
Frontend sử dụngPQSendQuery/PQGetResultcũng có thể cố gắng hủy một truy tỷ lệ kèo bóng đá trực tuyến hôm nay vẫn đang được xử lý bởi phần phụ trợ.
PQRequestCancelYêu cầu rằngPostgresTừ bỏ xử lý của truy tỷ lệ kèo bóng đá trực tuyến hôm nay hiện tại.
int PQRequestCancel (PGConn *Conn);Giá trị trả về là 1 nếu yêu cầu hủy bỏ thành công gửi, 0 nếu tỷ lệ kèo bóng đá trực tuyến hôm nay. (Nếu tỷ lệ kèo bóng đá trực tuyến hôm nay,pqerrormessageCho biết tại sao tỷ lệ kèo bóng đá trực tuyến hôm nay.) Công văn thành công tỷ lệ kèo bóng đá trực tuyến hôm nay đảm bảo rằng yêu cầu sẽ có bất kỳ ảnh hưởng nào, tuy nhiên. Bất kể giá trị trả về củaPQRequestCancel, ứng dụng phải tiếp tục với Trình tự đọc kết quả thông thường bằng cách sử dụngPQGetResult. Nếu hủy bỏ có hiệu lực, Truy vấn hiện tại sẽ chấm dứt sớm và trả về lỗi kết quả. Nếu hủy bỏ thất bại (giả sử, vì phụ trợ đã hoàn thành xử lý truy vấn), sau đó sẽ tỷ lệ kèo bóng đá trực tuyến hôm nay có Kết quả có thể nhìn thấy ở tất cả.
Lưu ý rằng nếu truy tỷ lệ kèo bóng đá trực tuyến hôm nay hiện tại là một phần của giao dịch, hủy bỏ sẽ hủy bỏ toàn bộ giao dịch.
PQRequestCancelCó thể được an toàn được gọi từ một người xử lý tín hiệu. Vì vậy, nó cũng có thể sử dụng nó kết hợp với đơn giảnPQEXEC, nếu Quyết định hủy bỏ có thể được đưa ra trong một trình xử lý tín hiệu. Vì ví dụ,PSQLGọiPQRequestCancelTừ bộ xử lý tín hiệu Sigint, do đó cho phép hủy bỏ các truy tỷ lệ kèo bóng đá trực tuyến hôm nay tương tác mà nó phát hành bởi vìPQEXEC. Lưu ý rằngPQRequestCancelsẽ tỷ lệ kèo bóng đá trực tuyến hôm nay có tác dụng nếu Kết nối hiện tỷ lệ kèo bóng đá trực tuyến hôm nay mở hoặc hiện tại tỷ lệ kèo bóng đá trực tuyến hôm nay xử lý một truy vấn.