powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Еще раз про потоки
10 сообщений из 10, страница 1 из 1
Еще раз про потоки
    #32365193
DJStealth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как указать в AfxBeginThread какуюто свою функцию, ну например есть диалог
class CFileSeacherDialog : public CDialog
{
....
afx_msg void OnSearchInDirectory(LPCTSTR sDirectoryPath);
.....
}

вот как мне в другой функции написать:AfxBeginThread(OnSearchInDirectory,this);
--
...
Рейтинг: 0 / 0
Еще раз про потоки
    #32365259
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
используй функторы.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
struct Functor {
    virtual int operator()= 0 ;
}

int StartTask(Functor* fn){
    return (*fn)();
}

class MyTask: public Functor {
    MyObj* obj;
    Type1 param;
public:
    MyTask(MyObj* obj_, Type1 param_) : obj(obj_), param(param_) {}
    int operator() {
        return obj->Method1(param);
    }
}

//использование
...
MyTask task1(obj1, param1);
AfxBeginThread(StartTask, &task1);
...


копни в сторону делегатов, сигналов, слотов.
...
Рейтинг: 0 / 0
Еще раз про потоки
    #32365822
olk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
//  Дополним диалог
class CFileSeacherDialog : public CDialog 
{ 
private:
CString m_sDirectoryPath;
.... 
afx_msg void OnSearchInDirectory(LPCTSTR sDirectoryPath); 
..... 
} 

//  -- Обяъвим глобальную функу
 
UINT ThreadSearchInDirectory(LPVOID pParam)
{
	CFileSeacherDialog *m_dlg=(CFileSeacherDialog *)pParam;
	m_dlg->OnSearchInDirectory(LPCTSTR(m_dlg->m_sDirecoryPath));
         return  0 ;
}


//  --  теперь вызов из другой функи
 

void CFileSeacherDialog::OnSearch()
{
m_sDirecoryPath = _T( "Бла - Бла - Бла" );
AfxBeginThread(ThreadSearchInDirectory,this)
}
...
Рейтинг: 0 / 0
Еще раз про потоки
    #32365851
olk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри лажанулся
переменная должна быть public

Код: plaintext
1.
public:
CString m_sDirectoryPath;

или должны быть public методы для ее установки/получения
...
Рейтинг: 0 / 0
Еще раз про потоки
    #32366162
DJStealth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
olk спасибо, а насчет private даже не заметил

--
...
Рейтинг: 0 / 0
Еще раз про потоки
    #32366518
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 olk

Зря ты так, я тут агитирую народ за уход от непосредственного API, от прямых и небезопасных приведений типов каждый раз...

Вместо этого в базовые функторы и tasks можно запрятать всю функциональность, а потом просто наследовать и безопасно имплементить функтор, кототко и понятно...

его (функтор), можно и в отдельном треде вызывать, и в очередь их ставить можно, и на отложенный вызов закладывать... в общем, универсальная штуковина...
...
Рейтинг: 0 / 0
Еще раз про потоки
    #32366565
YuriAM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 olk
Не надо было в строке
Код: plaintext
m_dlg->OnSearchInDirectory(LPCTSTR(m_dlg->m_sDirecoryPath));

записать просто
Код: plaintext
m_dlg->OnSearchInDirectory();

и функцию записать как без параметров. Тогда бы так не реагировали :-)
...
Рейтинг: 0 / 0
Еще раз про потоки
    #32366631
olk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To vdimas:
Конечно ты прав :) но я так понимаю людям надо быстро решить конкретную задачу при недостаточно хорошем знании плюсОв (не в обиду DJStealth),
а ты им сразу по голове функторами, делегатами ... еще можно было тут же про шаблоны, стл и локи ...
Пусть учаться ... и постепенно дойдут ...
...
Рейтинг: 0 / 0
Еще раз про потоки
    #32366751
DJStealth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
задача значит таккая:
есть почтовый робот, который складывает все вложения в письма в определенную папку.
Моя прога должна по рассписанию пройтись по папке, получить атрибуты всех файлов(дата и время файла), затем опираясь на это время с датой вкачать новые(т.е. те файлы, дата и/или время которых отличается, с прошлого обновления) в базу, вот вкачку я и хочу сделать в отдельных потоках(и это правильно). В разных классах есть разные функции по обработке файлов, вот эти фукнкции я и хотел впихшуть в разные потоки.
--
...
Рейтинг: 0 / 0
Еще раз про потоки
    #32366767
olk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да кто бы спорил
Но в потоках главное не как их запустить, а как синхронизировать ... и еще
как сделать твои функции потокобезапасными ....
так что гемороя у тебя будет еще много
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Еще раз про потоки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]