FAQ:WinAPI VCPP:передача нескольких параметров в процедуру потока
Материал из Весельчак У
Как передать больше одного параметр в процедуру потока?
Для этого нужно определить структуру со всеми параметрами (или указателями на них), которые нужно передать. А в процедуру потока передать лишь указатель на заполненную структуру.
Пример:
struct mystr
{
CEdit* pEd;
CDialog* pDlg;
DWORD* pdwd;
int *pn;
};
запуск потока:
mystr *pparam=new mystr; // экземпляр не должен быть временным!!!
memset(pparam, 0, sizeof(*pparam));
pparam->pEd=...;
pparam->pdwd=...;
::AfxBeginThread(thread, pparam);
// тут экземпляр *(pparam) уже нельзя использовать в нашем примере, так как
// он у нас удалился в процедуре потока
Процедура потока:
// поток:
UINT threadLoader(LPVOID pParam)
{
// копируем данные из структуры в локальную структуру
mystr data=*((mystr*)pParam);
// освобождаем память временной структуры
delete ((mystr*)pParam);
pParam=0;
...
data.pDlg->...;
(*data.pdwd)=...;
...
}