Ich bin neu in Qt und libcurl. Ich muss jetzt libcurl in meiner Qt-Anwendung verwenden. Ich begann mit:Verwenden von Libcurl richtig in Qt-Anwendung
m_res = curl_easy_perform(m_curl);
Dann emittieren ich ein Signal, das diese Zeichenfolge in einer anderen Anwendung gibt
emit dataString (QString::fromStdString(dataBufferfromcurl));
ich dieses Signal in einer anderen Anwendung zu einem Schlitz angeschlossen habe. Aber wenn die Curl aufgerufen wird, blockiert sie das andere Programm, indem sie Daten liest. Kann mir jemand vorschlagen, wie man Licurl in einer Qt-Anwendung richtig einsetzt?
Hier einige mehr-complete code:
Class A : public QObject{
void init(){
if (m_curl){
curl_easy_setopt(m_curl, CURLOPT_URL, "www.example.com");
curl_easy_setopt(m_curl, CURLOPT_SSL_VERIFYPEER, 0L); // enabling ssl
curl_easy_setopt(m_curl, CURLOPT_SSL_VERIFYHOST, 0L);
curl_easy_setopt(m_curl, CURLOPT_CONNECTTIMEOUT, 0);
curl_easy_setopt(m_curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(m_curl, CURLOPT_WRITEDATA, this);//
}
void process(){
if (m_curl) {
m_res = curl_easy_perform(m_curl);
}
};
//*************************************************************
class B : QThread{
Q_OBJECT
public:
void runProcess(){
aObject = new A();
///************ few more connects
connect(aObject, SIGNAL(connectionError(QString)), this, SLOT(s_fireConnectionError(QString)), Qt::QueuedConnection);
QTimer::singleShot(1000, workingHTTPReader, SLOT(process()));
}
} ;
In der Klasse C, nenne ich B::runProcess()
:
void C:: getAllData()
{
bObject = new B;
bObject->runProcess(); //***********Problem
}
Wenn ich es auf diese Weise aufrufen, liest sie die Web-Seite Inhalte, aber die Ausführung der Rest der Anwendungsblöcke.
Wie kann ich das anrufen, ohne zu blockieren?
Google: 'Qt :: QueuedConnection'. Oder verwenden Sie Multi-Threading. Es ist unklar, welche Probleme du hast. http://stackoverflow.com/help/how-to-ask –
Hallo @ DmitrySazonov Danke für die Antwort. Und ich habe sowohl 'Qt :: Directconnection' und 'Qt :: Queued Verbindung' müde. Ich habe mein Problem ein wenig klar erklärt. Bitte schau es dir an. – Rampp
Verwenden Sie QThread/QThreadPool/QtConcurrent für asynchrone Vorgänge. –