Передача параметров в поток
Подскажите пожалуйста. где ошибка.
я сделал свой клас
{
public:
CListBox List;
CEdit Edit;
};
создаем две переменных этого типа через new
затем передаем указатель в поток
в потоке читаем с листа необходимую инфу и все ок
а вот при записи в Edit типа
Edit.SeWindowsText("ok");
говоритт что
//*********
Debug assertion failed!
atlsimpstr.h
Line 790
Expression nLength >=0
Доообрый день уважаемые Дамы и Господа.
Подскажите пожалуйста. где ошибка.
я сделал свой клас
{
public:
CListBox List;
CEdit Edit;
};
создаем две переменных этого типа через new
затем передаем указатель в поток
в потоке читаем с листа необходимую инфу и все ок
а вот при записи в Edit типа
Edit.SeWindowsText("ok");
говоритт что
//*********
Debug assertion failed!
atlsimpstr.h
Line 790
Expression nLength >=0
А тебя существует Окошко куда ты пыташся занести текст?
А тебя существует Окошко куда ты пыташся занести текст?
Да Едит располагаеться на главной форме. И если после создания писать в Edit то все нормально но из потока не получаеться ошибка вышеописанная.
Да Едит располагаеться на главной форме. И если после создания писать в Edit то все нормально но из потока не получаеться ошибка вышеописанная.
А ты связал свою переменную с этим Edit'ом?
А ты связал свою переменную с этим Edit'ом?
UINT MyF1(LPVOID pParam)
{
CEditAndList *cb=(CEditAndList*) pParam; cb->List.GetText(1,Path); // это работает
cb->Edit.SetWindowText("ok"); // это нет
return 0;
}
За потоком
//**************************************
CEditAndList* qwe;
qwe =new CEditAndList;
qwe->List.Create(WS_VISIBLE | WS_VSCROLL | WS_HSCROLL |WS_BORDER ,CRect(StartX+(i*StepX), StartY, StartX+WidthX+(i*StepX), StartY+100), this, 0);
qwe->Edit.Create(WS_VISIBLE |WS_BORDER ,CRect(StartX+(i*StepX), StartY+101, StartX+WidthX+(i*StepX), StartY+121), this, 0);
qwe->Edit.SetWindowText("ok"); // тут работает
//**************************************
Запускаем поток
//**************************************
myWinThread1 = AfxBeginThread(MyF1, ((CEditAndList*)but_array2), THREAD_PRIORITY_NORMAL);
//**************************************
в патоке не работает хоты List точно также сделан но работает.
UINT MyF1(LPVOID pParam)
{
CEditAndList *cb=(CEditAndList*) pParam; cb->List.GetText(1,Path); // это работает
cb->Edit.SetWindowText("ok"); // это нет
return 0;
}
За потоком
//**************************************
CEditAndList* qwe;
qwe =new CEditAndList;
qwe->List.Create(WS_VISIBLE | WS_VSCROLL | WS_HSCROLL |WS_BORDER ,CRect(StartX+(i*StepX), StartY, StartX+WidthX+(i*StepX), StartY+100), this, 0);
qwe->Edit.Create(WS_VISIBLE |WS_BORDER ,CRect(StartX+(i*StepX), StartY+101, StartX+WidthX+(i*StepX), StartY+121), this, 0);
qwe->Edit.SetWindowText("ok"); // тут работает
//**************************************
Запускаем поток
//**************************************
myWinThread1 = AfxBeginThread(MyF1, ((CEditAndList*)but_array2), THREAD_PRIORITY_NORMAL);
//**************************************
в патоке не работает хоты List точно также сделан но работает.
У тебя и не должно работать. Ты создаешь новую переменную, которая не связана с окошком Edit. Для этого передавай ссылку на переменную
У тебя и не должно работать. Ты создаешь новую переменную, которая не связана с окошком Edit. Для этого передавай ссылку на переменную
Э мне нужно чтобы из потока я мог обращаться и к List и к Edit
Ну сделал так
//*****************
class CEditAndList
{
public:
CEditAndList();
CListBox List;
CEdit* Edit;
};
В потоке
//************
cb->Edit->SetWindowText("ok");
конструктор
//************
CEditAndList::CEditAndList()
{
Edit = new CEdit();
}
за потокм присваиваю все нормально
в потоке ошибка
Э мне нужно чтобы из потока я мог обращаться и к List и к Edit
Ну сделал так
//*****************
class CEditAndList
{
public:
CEditAndList();
CListBox List;
CEdit* Edit;
};
В потоке
//************
cb->Edit->SetWindowText("ok");
конструктор
//************
CEditAndList::CEditAndList()
{
Edit = new CEdit();
}
за потокм присваиваю все нормально
в потоке ошибка
В потоке ты работаешь с новым экземпляром Edit, а не с тем который ты передаешь в качестве параметра. Прочитать у тебя получится, а вот записать нет
В потоке ты работаешь с новым экземпляром Edit, а не с тем который ты передаешь в качестве параметра. Прочитать у тебя получится, а вот записать нет
ок
а как можно поступить тады ?
ок
а как можно поступить тады ?
Попробуй что то типа этого:
{
//CEditAndList *cb=(CEditAndList*) pParam;
(CEditAndList*) pParam->List.GetText(1,Path);
(CEditAndList*) pParam->Edit.SetWindowText ("ok");
return 0;
}
Попробуй что то типа этого:
{
//CEditAndList *cb=(CEditAndList*) pParam;
(CEditAndList*) pParam->List.GetText(1,Path);
(CEditAndList*) pParam->Edit.SetWindowText ("ok");
return 0;
}
Попробовал таже ошибка
Попробовал таже ошибка
Похожую конструкцию написал вроде работает. Кстати, где в свою функцию ты передаешь CEditAndList* qwe?
Похожую конструкцию написал вроде работает. Кстати, где в свою функцию ты передаешь CEditAndList* qwe?
в основной форма там где располагаються эти элементы.
{
public:
CListBox *List;
CEdit *Edit;
};
...
...
CEditAndList eal;
eal.List = (CListBox *)GetDlgItem(IDC_LIST1);
eal.Edit = (CEdit *)GetDlgItem(IDC_EDIT1);
в основной форма там где располагаються эти элементы.
Как ты их передаешь ? Выслать проект можешь?