DWORD WINAPI OnXXX(LPVOID ptr)
{
CBISBackuperDlg *ftr=(CBISBackuperDlg*)AfxGetMainWnd();
int count=ftr->m_log.GetCount(); // ошбика вылитает ошибка закрытия программы проблема с указателем.
...............
OnXXX это метод не класса CBISBackuperDlg указатель необходим для обращения к полям класса CBISBackuperDlg а также для вызовае его методов. Помогите!!! в других проектах таже самая ощибка.
Здравствуйте, Аноним, Вы писали:
А>DWORD WINAPI OnXXX(LPVOID ptr) А>{ А> CBISBackuperDlg *ftr=(CBISBackuperDlg*)AfxGetMainWnd(); А> int count=ftr->m_log.GetCount(); // ошбика вылитает ошибка закрытия программы проблема с указателем. А> ............... А>OnXXX это метод не класса CBISBackuperDlg указатель необходим для обращения к полям класса CBISBackuperDlg а также для вызовае его методов. Помогите!!! в других проектах таже самая ощибка.
проверь, чем ты инициализируеш g_pMainWnd при создании главного окна приложения.
А у Вас нет кого нибудь с гравицаппой и пепелацем?
А у Вас нет кого нибудь с гравицаппой и пепелацем?
Re[3]: Проблема с указателем
От:
Аноним
Дата:
06.07.05 08:55
Оценка:
Здравствуйте, MicroCell, Вы писали:
MC>пардон, m_pMainWnd
Немогу его вобше найти в своем диалоге
А вобще должно быть чтот вроде:
CMyDialog dlg;
m_pMainWnd = &dlg;
???
Re[4]: Проблема с указателем
От:
Аноним
Дата:
06.07.05 09:19
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, MicroCell, Вы писали:
MC>>пардон, m_pMainWnd
А>Немогу его вобше найти в своем диалоге А>А вобще должно быть чтот вроде: А>CMyDialog dlg; А>m_pMainWnd = &dlg; А>???
Нашол у меня CBISBackuper dlg;
m_pMainWnd = &dlg;
но прога всеравно вылетает.
Здравствуйте, Аноним, Вы писали:
А>DWORD WINAPI OnXXX(LPVOID ptr) А>{ А> CBISBackuperDlg *ftr=(CBISBackuperDlg*)AfxGetMainWnd(); А> int count=ftr->m_log.GetCount(); // ошбика вылитает ошибка закрытия программы проблема с указателем. А> ............... А>OnXXX это метод не класса CBISBackuperDlg указатель необходим для обращения к полям класса CBISBackuperDlg а также для вызовае его методов. Помогите!!! в других проектах таже самая ощибка.
Ты часом не пытаешься использрвать MFC из другого потока?
MFC не потокобезопасна
Re[2]: Проблема с указателем
От:
Аноним
Дата:
07.07.05 07:16
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:
LM>Здравствуйте, Аноним, Вы писали:
А>>DWORD WINAPI OnXXX(LPVOID ptr) А>>{ А>> CBISBackuperDlg *ftr=(CBISBackuperDlg*)AfxGetMainWnd(); А>> int count=ftr->m_log.GetCount(); // ошбика вылитает ошибка закрытия программы проблема с указателем. А>> ............... А>>OnXXX это метод не класса CBISBackuperDlg указатель необходим для обращения к полям класса CBISBackuperDlg а также для вызовае его методов. Помогите!!! в других проектах таже самая ощибка. LM>Ты часом не пытаешься использрвать MFC из другого потока?
LM>MFC не потокобезопасна
Там метод вызываетя из МКС класса а какже мне быть мне нуежн новый поток и MFC
Re[3]: Проблема с указателем
От:
Аноним
Дата:
07.07.05 07:21
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, LuciferMoscow, Вы писали:
LM>>Здравствуйте, Аноним, Вы писали:
А>>>DWORD WINAPI OnXXX(LPVOID ptr) А>>>{ А>>> CBISBackuperDlg *ftr=(CBISBackuperDlg*)AfxGetMainWnd(); А>>> int count=ftr->m_log.GetCount(); // ошбика вылитает ошибка закрытия программы проблема с указателем. А>>> ............... А>>>OnXXX это метод не класса CBISBackuperDlg указатель необходим для обращения к полям класса CBISBackuperDlg а также для вызовае его методов. Помогите!!! в других проектах таже самая ощибка. LM>>Ты часом не пытаешься использрвать MFC из другого потока?
LM>>MFC не потокобезопасна А>Там метод вызываетя из МКС класса а какже мне быть мне нуежн новый поток и MFC
Пардон
Там метод вызываетя из MFC класса а какже мне быть мне нуежн новый поток и MFC
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, LuciferMoscow, Вы писали:
LM>>>Здравствуйте, Аноним, Вы писали:
А>>>>DWORD WINAPI OnXXX(LPVOID ptr) А>>>>{ А>>>> CBISBackuperDlg *ftr=(CBISBackuperDlg*)AfxGetMainWnd(); А>>>> int count=ftr->m_log.GetCount(); // ошбика вылитает ошибка закрытия программы проблема с указателем. А>>>> ............... А>>>>OnXXX это метод не класса CBISBackuperDlg указатель необходим для обращения к полям класса CBISBackuperDlg а также для вызовае его методов. Помогите!!! в других проектах таже самая ощибка. LM>>>Ты часом не пытаешься использрвать MFC из другого потока?
LM>>>MFC не потокобезопасна А>>Там метод вызываетя из МКС класса а какже мне быть мне нуежн новый поток и MFC А>Пардон А>Там метод вызываетя из MFC класса а какже мне быть мне нуежн новый поток и MFC
Скажи по русски, что ты хочегь сделать(не переводя это на СИ++)
Здравствуйте, LuciferMoscow, Вы писали:
LM>Скажи по русски, что ты хочегь сделать(не переводя это на СИ++)
Функция должна резервировать данные. Тоесть копировать документы из одной папки в другую и в процессе выполнения резерворования программа недолжна зависать вот такая вот проблема поэтому я и решил использовать потоки.
«Были холопами, стали рабами». A.Пугачева.
Re[6]: Проблема с указателем
От:
Аноним
Дата:
14.07.05 08:54
Оценка:
Удалено избыточное цитирование.
Здравствуйте, _BIS_, Вы писали:
_BI>Функция должна резервировать данные. Тоесть копировать документы из одной папки в другую и в процессе выполнения резерворования программа недолжна зависать вот такая вот проблема поэтому я и решил использовать потоки.
Функция должна резервировать данные. Тоесть копировать документы из одной папки в другую и в процессе выполнения резерворования программа недолжна зависать вот такая вот проблема поэтому я и решил использовать потоки. S.O.S!!!
Здравствуйте, Аноним, Вы писали:
А>Функция должна резервировать данные. Тоесть копировать документы из одной папки в другую и в процессе выполнения резерворования программа недолжна зависать вот такая вот проблема поэтому я и решил использовать потоки. S.O.S!!!
Код этой функции в студию
Здравствуйте, Аноним, Вы писали:
А>DWORD WINAPI OnXXX(LPVOID ptr) А>{ А> CBISBackuperDlg *ftr=(CBISBackuperDlg*)AfxGetMainWnd(); А> int count=ftr->m_log.GetCount(); // ошбика вылитает ошибка закрытия программы проблема с указателем.
Здравствуйте, sc, Вы писали:
sc>Здравствуйте, Аноним, Вы писали:
А>>DWORD WINAPI OnXXX(LPVOID ptr) А>>{ А>> CBISBackuperDlg *ftr=(CBISBackuperDlg*)AfxGetMainWnd(); А>> int count=ftr->m_log.GetCount(); // ошбика вылитает ошибка закрытия программы проблема с указателем. sc>
<skiped>
sc>Может быть сделать проверку? sc>
CBISBackuperDlg *ftr=(CBISBackuperDlg*)AfxGetMainWnd();
sc>if(NULL != ftr && ::IsWindow(ftr->m_hWnd)
sc>{
sc> //работаем дальше
sc> int count=ftr->m_log.GetCount();
sc>}
m_log какой тип имеет? CComboBox? Нельзя вызывать эту функцию из другого потока. НЕЛЬЗЯ!
Re[3]: Проблема с указателем
От:
Аноним
Дата:
18.07.05 08:10
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:
LM>Здравствуйте, sc, Вы писали:
sc>>Здравствуйте, Аноним, Вы писали:
А>>>DWORD WINAPI OnXXX(LPVOID ptr) А>>>{ А>>> CBISBackuperDlg *ftr=(CBISBackuperDlg*)AfxGetMainWnd(); А>>> int count=ftr->m_log.GetCount(); // ошбика вылитает ошибка закрытия программы проблема с указателем. sc>>
<skiped>
sc>>Может быть сделать проверку? sc>>
CBISBackuperDlg *ftr=(CBISBackuperDlg*)AfxGetMainWnd();
sc>>if(NULL != ftr && ::IsWindow(ftr->m_hWnd)
sc>>{
sc>> //работаем дальше
sc>> int count=ftr->m_log.GetCount();
sc>>}
LM>m_log какой тип имеет? CComboBox? Нельзя вызывать эту функцию из другого потока. НЕЛЬЗЯ!
m_log ето СListBox но тут чтото другой я уже месяц голову ломаю вылет происходит в строчках где используется указатель ftr по очередно коментировал спрочки и каждый раз был вылет на селдуюшей строчке.
может быть в диалоге CBISBackuperDlg определить переменную int m_LogCount и в самом диалоге на WM_CLOSE или WM_DESTROY выполнять m_LogCount = m_log.GetCount() ?
Соотвественно исходный код заменить на такой, например:
При создании потока передавай MainWnd в функцию потока параметром
Re[2]: Проблема с указателем
От:
Аноним
Дата:
19.07.05 05:57
Оценка:
Здравствуйте, orefkov, Вы писали:
O>При создании потока передавай MainWnd в функцию потока параметром
m_hWnd? я пробырал передватвать через параметр в функции LPVOID ptr потом преобразовую к m_hWnd.
Re[3]: Проблема с указателем
От:
Аноним
Дата:
19.07.05 06:17
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, orefkov, Вы писали:
O>>При создании потока передавай MainWnd в функцию потока параметром
А>m_hWnd? я пробырал передватвать через параметр в функции LPVOID ptr потом преобразовую к m_hWnd.
//
CreateThread(NULL,0,OnWorker,m_hWnd,0,0);
// вот проблемная функция
WORD WINAPI OnWorker(LPVOID ptr)
{
CBISBackuperDlg *ftr=(CBISBackuperDlg*)AfxGetMainWnd();
int count=ftr->m_log.GetCount();
if(ftr->coutpath==0){
return 0;
}
for(int t=0;t<count;t++){ ftr->m_log.DeleteString(0);
} ftr->m_progress.SetPos(0);
for(int i=0;i<ftr->coutpath;i++){
if((ftr->CopyDirTree(ftr->arpath[i],ftr->arpath[i++]))==1){ // CopyDirTree(..) резервирует данные ftr->m_log.AddString(ftr->arpath[i]); // заполнение отчета ftr->m_log.AddString(ftr->arpath[i++]); // заполнение отчета ftr->Logger(ftr->arpath[i],ftr->arpath[i++]); // функция для заполения лога.
}
else {
CString sterout;
CString sterin;
sterout.Format("%s %s",ftr->arpath[i],"Неудачно");
sterin.Format("%s %s",ftr->arpath[i++],"Неудачно");
} ftr->m_progress.StepIt();
} ftr->m_progress.SetPos(0);
KillTimer(ftr->m_hWnd,69);
return 1;
}
// функция для заполения лога.
void CBISBackuperDlg::Logger(CString pathout,CString pathin)
{
fstream file;
file.open(fdate,ios::out|ios::binary|ios::app);
if(!file){
return;
}
file<<pathin;
file<<pathout;
file.close();
}
Как мне выйти из положение? Может есть какой то аналог потоков, но с возможностью использования MFC. Или можно както выйти из моего положения не уходя от даного потока.