::AfxBeginThread Helppp!!
От: jlizard  
Дата: 08.01.05 16:19
Оценка:
Здравствуйте, тема передачи параметров в функцию потока далеко не нова в этом форуме, но все таки, помогите пожайлуста разобраться,
Есть класс,

class CHTTPPicker
{
public:
CHTTPPicker( HWND hWnd );
~CHTTPPicker(void);
void Start(void);
/// thread function
static UINT RequestProcess(LPVOID lpParam);

private:
HWND hWnd;
IN_THREAD_PARAM in_thread_param;
...
...
}

В функцию потока необходимо передать такую структуру,
struct IN_THREAD_PARAM
{
HWND hWnd;
CString czStr1;
CString czStr2;
CStringList cslList; //( или CStringArray )
};

// constructor
CHTTPPicker::CHTTPPicker( HWND hWnd )
{
// заполняю структуру
in_thread_param.hWnd = hWnd;
...
...
}

// вызов функции потока
void CHTTPPicker::Start(void)
{

AfxBeginThread( (AFX_THREADPROC) CHTTPPicker::RequestProcess,
(LPVOID) &in_thread_param );
// sleep(100); // AfxMessageBox("");
}

// функция потока
UINT CHTTPPicker::RequestProcess(LPVOID lpParam)
{
IN_THREAD_PARAM *in_thread_param = (IN_THREAD_PARAM *)lpParam;

//или:
//IN_THREAD_PARAM in_thread_param;
//memcpy( &in_thread_param, lpParam, sizeof(IN_THREAD_PARAM) );
...
...
return 0;
}

Проблема,
в функции потока при инициализации in_thread_param данные из lpParam теряются,
если после AfxBeginThread, поставить Sleep(200) или AfxMessageBox, то все отрабатывает
нормально.
Как решить эту проблему ? in_thread_param — член класса, видна всем функциям данного класа, по идее, по завершению Start() до инициализации данных в потоке(до запуска потока), in_thread_param не должна разрушаться или как то изменяться.
Задача усложняется еще тем что мне необходимо будет запускать несколько параллельных потоков в цикле .
Вобщем, подскажите кто может как обойти данную проблему, как передать в поток сложные структуры данных, возможно другим каким путем ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.