FAQ:WinAPI VCPP:передача нескольких параметров в процедуру потока — различия между версиями
Материал из Весельчак У
RXL (обсуждение | вклад) (Разделение FAQ на статьи.) |
(нет различий)
|
Текущая версия на 20:27, 2 ноября 2008
Как передать больше одного параметр в процедуру потока?
Для этого нужно определить структуру со всеми параметрами (или указателями на них), которые нужно передать. А в процедуру потока передать лишь указатель на заполненную структуру.
Пример:
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)=...; ... }