Проблема с указателем
От: Аноним  
Дата: 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;
Re[4]: [от модератора]
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 19.07.05 09:34
Оценка:
Убедительная просьба: пользуйтесь кодами форматирования при вставке текстов программ.
- Искренне ваш, Поросенок Пафнутий
Re[5]: Проблема с указателем
От: Аноним  
Дата: 25.07.05 07:24
Оценка:
Здравствуйте, orefkov, Вы писали:

O>Попробуй так:

O>
O>CreateThread(NULL,0,OnWorker,(LPVOID)AfxGetMainWnd(),0,0); 

O>WORD WINAPI OnWorker(LPVOID ptr)
O>{
O>    CBISBackuperDlg *ftr=(CBISBackuperDlg*)ptr;
O>


Не помогло всеравно вылетает на любой строке где используется ftr.
Есть ли какйото аналог потока но с фозможностью поработать с MFC.?
Re: Проблема с указателем
От: avs.prg Украина  
Дата: 25.07.05 07:49
Оценка:
Здравствуйте, Аноним, Вы писали:

А>DWORD WINAPI OnXXX(LPVOID ptr)

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

Смотрим MSDN .....

If AfxGetMainWnd is called from the application's primary thread, it returns the application's main window according to the above rules. If the function is called from a secondary thread in the application, the function returns the main window associated with the thread that made the call.
.......

Для получения нужного объекта окна, функция AfxGetMainWnd() должна вызываться в основном потоке, и в порожденный поток нужно передавать указатель на объект окна через параметры потоковой функции.

Да и если приложение базируется на MFC, то лучше использовать AfxBeginThread и класс потока порожденный от CWinThread.
[от модератора]
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 25.07.05 12:57
Оценка:
Убедительная просьба — избегайте избыточного цитирования при ответе на сообщение.
[ posted via RSDN@Home 1.1.4 stable SR1 r568, accompanied by silence ]
- Искренне ваш, Поросенок Пафнутий
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.