W modelu wykonywania programu jednowątkowego przepływ wykonywania nie może zostać przerwany przez dane powracające z zapytania asynchronicznego lub ogólniej gniazda sieciowego. Tylko sygnały (SIGTERM
i przyjaciółmi) mogą zakłócać przepływ, ale sygnały nie mogą być połączone z przychodzącymi danymi.
Dlatego nie jest możliwe wywołanie zwrotne w celu otrzymywania powiadomień o przychodzących danych. Fragment kodu w libpq, który byłby niezbędny do wyemitowania wywołania zwrotnego, nigdy nie uruchomiłby się, jeśli Twój kod go nie wywoła. A jeśli musisz to wywołać, to niweczy cały sens oddzwonienia.
Istnieją biblioteki takie jak Qt
które zapewniają wywołania zwrotne, ale są zaprojektowane od podstaw z główną pętlą, która działa jako procesor zdarzeń. Kod użytkownika jest zorganizowany w wywołania zwrotne i możliwe jest przetwarzanie przychodzących danych w oparciu o zdarzenia. Ale w tym przypadku biblioteka przejmuje własność przepływu wykonywania, co oznacza, że jej pętla główna odpytuje źródła danych. To po prostu przenosi odpowiedzialność na inny fragment kodu poza libpq.