Здравствуйте, тема передачи параметров в функцию потока далеко не нова в этом форуме, но все таки, помогите пожайлуста разобраться,
Есть класс,
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 не должна разрушаться или как то изменяться.
Задача усложняется еще тем что мне необходимо будет запускать несколько параллельных потоков в цикле

.
Вобщем, подскажите кто может как обойти данную проблему, как передать в поток сложные структуры данных, возможно другим каким путем ?