2013-03-09 13 views
10

Używam curl do wysyłania żądań POST i GET i używam funkcji wywołania zwrotnego, aby uzyskać odpowiedzi na te żądania. Te funkcje callback są statycznymi funkcjami składowymi, które z kolei wywołują funkcje niestanowiące elementów statycznych (nie można używać nie statycznych funkcji składowych w curl bezpośrednio w celu obejścia tego problemu).Czy curl_easy_perform() jest synchroniczna lub asynchroniczna?

Ponieważ te funkcje zwrotne nie mogą zwrócić wyniku, używam atrybutu w mojej klasie C++ do przechowywania odpowiedzi. Wszystko działa dobrze, ale teraz moje pytanie. Czy curl_easy_perform() blokuje się, dopóki nie zostanie wysłane całe żądanie ORAZ odpowiedź zostanie przetworzona przez funkcję zwrotną LUB czy mój program będzie kontynuowany po curl_easy_perform() i czy zostanie on w jakiś sposób przerwany po otrzymaniu odpowiedzi z żądania?

Dla mnie ważne jest to, że chcę mieć pewność, że dane w moim atrybucie, które powinny zawierać odpowiedź, już tam są, czy też jest możliwe, że w tym atrybucie wciąż są stare dane, ponieważ funkcja zwrotna nie ma ale został powołany.

Zdaję sobie sprawę, że moje wyjaśnienie nie jest bardzo jasne, więc jeśli nie rozumiesz, proszę dać mi znać, a spróbuję przeformułować to.

Dzięki!

+0

zwrotna zostanie wywołana wewnątrz funkcji możesz przekazać go. –

+0

Masz na myśli niewłaściwą funkcję zwrotów? Mówię tylko, że kiedy dane przychodzą, musi przekazać te dane do określonej funkcji. Myślałem, że to także funkcja zwrotna. Ale przekazujesz funkcję zwrotną do zwijania w curl_easy_setopt(). Wszystkie opcje dla żądania są ustawiane przed curl_easy_perform(). Po prostu chcę wiedzieć, czy curl_easy_perform() blokuje do czasu rozpatrzenia żądania. – Silver

Odpowiedz

11

Czy curl_easy_perform() blok aż cały wniosek jest wysyłanie i odpowiedź jest przetwarzany przez funkcję zwrotną

Tak, to jest dokładnieco robi.

(Jeśli chcemy raczej bez blokowania zachowań, libcurl's multi interface jest droga.)

+0

proszę spojrzeć na moje pytanie dotyczące 'curl_multi_ *' interface: http://stackoverflow.com/questions/24288513/how-to-do-curl-multi-perform-asynchronously-in-c –

Powiązane problemy