2012-04-08 4 views
4

Ich habe einige Probleme mit der Verwendung von wxHTTP in einem Thread. Ich habe unterhalb Klasse erstellt, die von wxThread abgeleitet werden, um wxHTTP zu verwenden.wxHTTP & Threads

class Thread : public wxThread { 
private: 
wxHTTP get; 

public: 
Thread() 
{ 
} 
~Thread() 
{ 
} 

virtual ExitCode Entry() 
{ 

    get.SetHeader(wxT("Content-Type"), wxT("text/html; charset=utf-8")); 
    get.Connect(wxT("www.mysite.com")); 

    get.SetTimeout(1); 

    wxInputStream *httpStream = get.GetInputStream(wxT("/script.php?name=aaa&text=blabla")); 
    wxDELETE(httpStream); 
    get.Close(); 


    return 0; 
} 
}; 

Ich erstelle diesen Thread und führen Sie es (Threads erstellt werden, lief und alles ist in Ordnung mit ihnen). Leider scheint wxHTTP mit Threads nicht richtig zu funktionieren (selbst meine Firewall fragt mich nicht nach Verbindung). Gibt es eine Möglichkeit, WxHTTP-Verbindung in einem Thread zu erstellen?

+5

Nun, ich fand eine Lösung: P Ich musste wxHTTP :: Initialize() im Haupt-Thread aufrufen (ich habe es in WxApp getan: onInit()). Mehr Informationen finden Sie [hier] (http://www.litwindow.com/Knowhow/wxSocket/wxsocket.html) (es wird auf wxSocket erklärt, aber es ist dasselbe für wxHTTP) – fex

+0

Während das ein paar Jahre alt ist, wäre es großartig, wenn Sie eine Antwort schreiben könnten, wie Sie das gelöst haben und dann akzeptieren Sie es. – Taryn

+0

Antwort hinzugefügt fühlen Sie sich frei zu fragen –

Antwort

2

Hier ist die Antwort (wie von @bluefeet angefordert) wxHTTP von wxSocketBase erbt und in wxSocketBase haben wir dieses Zitat

Wenn wxSocket von mehreren Threads verwendet wird, auch implizit (zB durch wxFTP oder wxHTTP Verwendung in Ein weiterer Thread) Sie müssen die Sockets vom Hauptthread initialisieren, indem Sie Initialize() aufrufen, bevor Sie die anderen erstellen.

Siehe here für weitere Erklärung

1

Anruf

wxSocketBase :: Initialize();

in Ihren Anwendungen OnInit Funktion und Wxurl/wxhttp Funktionen sollten von Threads arbeiten.