Multithreading
От: Евгений Чечковский  
Дата: 13.06.01 14:40
Оценка:
Нужно создать новый поток, который отслеживал
бы изменения в файловой системе и обновлял
содержимое TreeView. Изменения ослеживаются
с помощью FindFirstChangeNotification и WaitForSingleObject.

Новый поток создаю с помощью AfxBeginThread().

Первый параметр — указатель на функцию, реализующую
поток. Вопрос в том, что если описать эту функцию как
член класса, из которого создаётся новый поток, то компилятор
выдаёт странную ошибку:

void CNewThrDlg::OnOK()
{
UINT (CNewThrDlg::*pFunction)(LPVOID pParam) = CNewThrDlg::MyNewThread;
AfxBeginThread(pFunction, &m_MyStruct);
}

...

UINT CNewThrDlg::MyNewThread(LPVOID pParam)
{
AfxMessageBox("New thread started");
return 0;
}

При компиляции выдаётся сообщение:

D:\Projects\WORK\NewThr\NewThrDlg.cpp(185) : error C2665: 'AfxBeginThread' :
none of the 2 overloads can convert parameter 1 from type 'unsigned int
(__thiscall CNewThrDlg::*)(void *)'

Но если описать эту функцию во внешнем h — файле, затем подключить его к
классу, создающему поток,
то поток создаётся нормально, но из этой функции невозможно вызвать метод
класса,
который обновляет содержимое TreeView:


AfxBeginThread(MyNewThread, &m_MyStruct);

...

UINT MyNewThread(LPVOID pParam)
{
....
Если здесь попытаться вызвать метод класса, создающего поток, то
получу ошибку типа:
D:\PROJECTS\WORK\Simpexp\FoldersView.cpp(518) : error C2352:
'FoldersView::FillFoldersTree' : illegal call of non-static member function
}

Вот такие вот дела...
Может есть какие мысли по этому поводу?

Thanks...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.