Форум программистов, компьютерный форум CyberForum.ru

Можно ли создать поток для выполнения отдельного метода - C++

Восстановить пароль Регистрация
 
NaV'i4ok
3 / 3 / 0
Регистрация: 18.03.2011
Сообщений: 85
08.10.2012, 10:36     Можно ли создать поток для выполнения отдельного метода #1
Здравствуйте!
Подскажите как ( и возможно ли это вообще ) создать поток для отдельного метода?
Имеется клас окна, в нем метод который перебирает файлы на компе( void CMainDlg::Recurse(LPCTSTR pstr) и вписывает данные в переменнную CString m_sFound; которую надо при изменении вывести в окно...
Как запустить Recurse() в отдельном потоке, если CWinThread* m_pThrInd;- например, хендл для создаваемого потока(тоже член класса) и
C++
1
2
3
4
5
6
UINT/* __cdecl*/ CMainDlg::ThreadInd(LPVOID pParam)
{
    Recurse(("С:\\"));
            //...
             return 0;
}
при нажатии кнопки "ОК" - запустить поток:
C++
1
2
3
4
5
6
void CMainDlg::OnBtnStart()
{
             m_pThrInd = AfxBeginThread( ThreadInd, NULL );
             // и если через указатель на метод тоже не работает...
             //m_pThrInd = AfxBeginThread( CMainDlg::*pf, NULL );
}
Студия ругается: error C3867: 'CMainDlg::ThreadInd': function call missing argument list; use '&CMainDlg::ThreadInd' to create a pointer to member
а если глобальный указатель на метод -
//pointer to method ThreadInd()
UINT (CMainDlg::*pf)(LPVOID pParam) =
&CMainDlg::ThreadInd;
- то
1>e:\users\admin\desktop\task - копия\task\maindlg.cpp(190): error C2143: syntax error : missing ')' before '<tag>::*'
1>e:\users\admin\desktop\task - копия\task\maindlg.cpp(190): error C2661: 'AfxBeginThread' : no overloaded function takes 0 arguments
1>e:\users\admin\desktop\task - копия\task\maindlg.cpp(190): error C2059: syntax error : ')'
1>
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2012, 10:36     Можно ли создать поток для выполнения отдельного метода
Посмотрите здесь:

Процедура обработки сообщений для отдельного контрола C++
Создать класс с именем Rational для выполнения арифметических действий с дробями C++
Как измерить время выполнения отдельного участка кода? C++
C++ Можно ли в DLL создать поток?
Можно ли создать поток для нестатического метода класса? C++
Нужно создать базу данных (создать пустой бинарный файл). Через поток. Поток бинарного файла описать в виде локальной переменной внутри функции. C++
C++ Поле выполнения цикла получается непрерывный поток данных
Поток из не статического метода C++
Создать отдельный управляемый поток для бесконечного процесса C++
Можно ли перевернуть поток C++
Возвращение массива в качестве результата выполнения метода класса (Kubuntu, netBeans, g++) C++
Передача метода в поток после инициализации потока C++ WinAPI

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,314
08.10.2012, 12:43     Можно ли создать поток для выполнения отдельного метода #2
Этот метод в классе твоего диалога должен быть статическим.
NaV'i4ok
3 / 3 / 0
Регистрация: 18.03.2011
Сообщений: 85
08.10.2012, 12:49  [ТС]     Можно ли создать поток для выполнения отдельного метода #3
но из статического метода нет доступа к нестатическим полям...
тогда надо все поля делать статик...
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,314
08.10.2012, 13:06     Можно ли создать поток для выполнения отдельного метода #4
А ты в LPVOID pParam передавай указатель на объект, с которым ты работаешь, внутри этого статического метода приводи его к CMainDlg* - и вуаля!
Yandex
Объявления
08.10.2012, 13:06     Можно ли создать поток для выполнения отдельного метода
Ответ Создать тему
Опции темы

Текущее время: 15:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru