2012-04-08 3 views
4

У меня есть некоторые проблемы с использованием wxHTTP внутри Thread. Я создал ниже класс, который получается из wxThread для использования wxHTTP.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; 
} 
}; 

Я создаю эту тему и запускаю ее (потоки создаются, бегают, и с ними все в порядке). К сожалению, wxHTTP, похоже, работает неправильно с потоками (даже мой брандмауэр не спрашивает меня о подключении). Есть ли способ создать соединение wxHTTP внутри потока?

+5

ну я нашел решение: P мне пришлось называть wxHTTP :: Initialize() в основном потоке (я сделал это в wxApp: onInit()). Более подробную информацию можно найти здесь (http://www.litwindow.com/Knowhow/wxSocket/wxsocket.html) (это объясняется на wxSocket, но это то же самое для wxHTTP) – fex

+0

Пока это несколько лет, это было бы отлично, если вы могли бы опубликовать ответ о том, как вы решили это, а затем принять его. – Taryn

+0

ответ добавлен, не стесняйтесь спрашивать –

ответ

2

Вот ответ (по просьбе @bluefeet) wxHTTP наследует от wxSocketBase и в wxSocketBase мы имеем эту цитату

При использовании wxSocket из нескольких потоков, даже неявно (например, с помощью wxFTP или wxHTTP в другой поток), вы должны инициализировать сокеты из основного потока, вызывая Initialize() перед созданием других.

См here для более подробного объяснения

1

Вызов

wxSocketBase :: Initialize();

в ваших приложениях Функция OnInit и функции wxurl/wxhttp должны работать из потоков.