Проблема с указателем
От: Аноним  
Дата: 28.06.05 08:25
Оценка:
DWORD WINAPI OnXXX(LPVOID ptr)
{
CBISBackuperDlg *ftr=(CBISBackuperDlg*)AfxGetMainWnd();
int count=ftr->m_log.GetCount(); // ошбика вылитает ошибка закрытия программы проблема с указателем.
...............
OnXXX это метод не класса CBISBackuperDlg указатель необходим для обращения к полям класса CBISBackuperDlg а также для вызовае его методов. Помогите!!! в других проектах таже самая ощибка.
Re: Проблема с указателем
От: MicroCell  
Дата: 28.06.05 10:04
Оценка:
Здравствуйте, Аноним, Вы писали:

А>DWORD WINAPI OnXXX(LPVOID ptr)

А>{
А> CBISBackuperDlg *ftr=(CBISBackuperDlg*)AfxGetMainWnd();
А> int count=ftr->m_log.GetCount(); // ошбика вылитает ошибка закрытия программы проблема с указателем.
А> ...............
А>OnXXX это метод не класса CBISBackuperDlg указатель необходим для обращения к полям класса CBISBackuperDlg а также для вызовае его методов. Помогите!!! в других проектах таже самая ощибка.

проверь, чем ты инициализируеш g_pMainWnd при создании главного окна приложения.
А у Вас нет кого нибудь с гравицаппой и пепелацем?
Re[2]: Проблема с указателем
От: MicroCell  
Дата: 28.06.05 10:05
Оценка:
пардон, m_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;
но прога всеравно вылетает.
Re: Проблема с указателем
От: LuciferMoscow Россия  
Дата: 06.07.05 10:09
Оценка:
Здравствуйте, Аноним, Вы писали:

А>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
Re[4]: Проблема с указателем
От: LuciferMoscow Россия  
Дата: 08.07.05 07:06
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте, 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
Скажи по русски, что ты хочегь сделать(не переводя это на СИ++)
Re[5]: Проблема с указателем
От: _BIS_  
Дата: 12.07.05 14:16
Оценка:
Удалено избыточное цитирование.

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

LM>Скажи по русски, что ты хочегь сделать(не переводя это на СИ++)


Функция должна резервировать данные. Тоесть копировать документы из одной папки в другую и в процессе выполнения резерворования программа недолжна зависать вот такая вот проблема поэтому я и решил использовать потоки.
«Были холопами, стали рабами». A.Пугачева.
Re[6]: Проблема с указателем
От: Аноним  
Дата: 14.07.05 08:54
Оценка:
Удалено избыточное цитирование.

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

_BI>Функция должна резервировать данные. Тоесть копировать документы из одной папки в другую и в процессе выполнения резерворования программа недолжна зависать вот такая вот проблема поэтому я и решил использовать потоки.


Функция должна резервировать данные. Тоесть копировать документы из одной папки в другую и в процессе выполнения резерворования программа недолжна зависать вот такая вот проблема поэтому я и решил использовать потоки. S.O.S!!!
Re[7]: Проблема с указателем
От: LuciferMoscow Россия  
Дата: 14.07.05 10:29
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Функция должна резервировать данные. Тоесть копировать документы из одной папки в другую и в процессе выполнения резерворования программа недолжна зависать вот такая вот проблема поэтому я и решил использовать потоки. S.O.S!!!

Код этой функции в студию
Re: Проблема с указателем
От: sc Россия  
Дата: 14.07.05 13:23
Оценка:
Здравствуйте, Аноним, Вы писали:

А>DWORD WINAPI OnXXX(LPVOID ptr)

А>{
А> CBISBackuperDlg *ftr=(CBISBackuperDlg*)AfxGetMainWnd();
А> int count=ftr->m_log.GetCount(); // ошбика вылитает ошибка закрытия программы проблема с указателем.

<skiped>

Может быть сделать проверку?
CBISBackuperDlg *ftr=(CBISBackuperDlg*)AfxGetMainWnd();
if(NULL != ftr && ::IsWindow(ftr->m_hWnd)
{
    //работаем дальше
    int count=ftr->m_log.GetCount();
}
Re[2]: Проблема с указателем
От: LuciferMoscow Россия  
Дата: 14.07.05 14:59
Оценка:
Здравствуйте, 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 по очередно коментировал спрочки и каждый раз был вылет на селдуюшей строчке.
Re[4]: Проблема с указателем
От: sc Россия  
Дата: 18.07.05 08:25
Оценка:
может быть в диалоге CBISBackuperDlg определить переменную int m_LogCount и в самом диалоге на WM_CLOSE или WM_DESTROY выполнять m_LogCount = m_log.GetCount() ?
Соотвественно исходный код заменить на такой, например:
CBISBackuperDlg *ftr = (CBISBackuperDlg*)AfxGetMainWnd();
if(NULL != ftr)
{
         int count = ftr->m_LogCount;
         //и т.д.
}
Re: Проблема с указателем
От: orefkov  
Дата: 18.07.05 12:08
Оценка:
При создании потока передавай 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. Или можно както выйти из моего положения не уходя от даного потока.
Re[4]: Проблема с указателем
От: orefkov  
Дата: 19.07.05 06:47
Оценка:
Попробуй так:
CreateThread(NULL,0,OnWorker,(LPVOID)AfxGetMainWnd(),0,0); 

WORD WINAPI OnWorker(LPVOID ptr)
{
    CBISBackuperDlg *ftr=(CBISBackuperDlg*)ptr;
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.