Re[3]: Подскажите про потоки (ответа я не нашел)
От: BlackHeretic Израиль  
Дата: 25.02.04 14:49
Оценка:
Здравствуйте, Mandigal, Вы писали:

M>Здравствуйте, BlackHeretic, Вы писали:


BH>>Здравствуйте, Mandigal, Вы писали:


M>>>У меня есть в проге длительная операция (рассчет CRC32 для файлов больше 1GB) и я хочу для нее создать отдельный рабочий поток


M>>>Делаю как в хелпах писано

M>>>Глобальную управляющую функцию
M>>>UINT MyThreadProc( LPVOID pParam )
M>>>{

M>>> CTestDlg::testThread();

M>>>return 0;
M>>>}
M>>>и ее вызов

M>>>void CTestDlg::OnBnClickedB1()

M>>>{
M>>>AfxBeginThread(MyThreadProc,NULL);
M>>>}

M>>>Но естественно глобальная MyThreadProc не может видеть CTestDlg::testThread(); (ну или я подставлял содерживое testThread(), там тоже все рассчитано что функция выполняется в классе CTestDlg), мне знакомый посоветовал что можно объявить MyThreadProc как член класса CTestDlg и просто написать оболочку(глобальную) для запуска ее, но у меня не получилось.

M>>>Пожалуйста подскажите как, если можно с примерами, потому как я с потоками вообще еще не работал и пока непонимаю принципов (прочтение MSDN не помогло ( )

BH>>Вместо NULL передавай HWND диалога. А как закончишь расчет перешли результат через SendMessage.

BH>>Номер сообщения получай через RegiterWindowMessage
BH>>Удачи

M>Хорошо, я передал HWND диалога с помощью GetSafeHwnd()

M>а дальше мне его как использовать?
M>и зачем мне передавать что-то через SendMessage если функция CTestDlg::testThread() и так сама в эдитбоксы значения записывает
M>Суть в том что в CTestDlg::testThread() находиться тот же код который раньше был в CTestDlg::OnBnClickedB1(), просто я хотел эту всю операцию отдельным потоком сделать

Вызывать методы из другого потока, особенно которые меняют что-то, небезопасно. Как минимум данные могут быть не корректны. А сообщение придет в рамках потока диалога и не с кем не законфликтует. Ловить это лучше в WindowProc диалога. Просто я тока вчера написал реализацию подобной байды — тока у меня нужно было по HTTP кое что скачивать. Все чудненько работает
ICQ 156156278
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.