Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Передача параметров в поток

2.0K
02 марта 2006 года
Bigzone
49 / / 18.08.2004
Доообрый день уважаемые Дамы и Господа.
Подскажите пожалуйста. где ошибка.
я сделал свой клас
 
Код:
class CEditAndList
{
    public:
    CListBox    List;
    CEdit       Edit;
};

создаем две переменных этого типа через new
затем передаем указатель в поток
в потоке читаем с листа необходимую инфу и все ок
а вот при записи в Edit типа
Edit.SeWindowsText("ok");
говоритт что
//*********
Debug assertion failed!
atlsimpstr.h
Line 790
Expression nLength >=0
324
02 марта 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by Bigzone
Доообрый день уважаемые Дамы и Господа.
Подскажите пожалуйста. где ошибка.
я сделал свой клас
 
Код:
class CEditAndList
{
    public:
    CListBox    List;
    CEdit       Edit;
};

создаем две переменных этого типа через new
затем передаем указатель в поток
в потоке читаем с листа необходимую инфу и все ок
а вот при записи в Edit типа
Edit.SeWindowsText("ok");
говоритт что
//*********
Debug assertion failed!
atlsimpstr.h
Line 790
Expression nLength >=0



А тебя существует Окошко куда ты пыташся занести текст?

 
Код:
Edit.SeWindowsText("ok");
2.0K
03 марта 2006 года
Bigzone
49 / / 18.08.2004
Цитата:
Originally posted by AndreySar
А тебя существует Окошко куда ты пыташся занести текст?
 
Код:
Edit.SeWindowsText("ok");


Да Едит располагаеться на главной форме. И если после создания писать в Edit то все нормально но из потока не получаеться ошибка вышеописанная.

324
03 марта 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by Bigzone
Да Едит располагаеться на главной форме. И если после создания писать в Edit то все нормально но из потока не получаеться ошибка вышеописанная.



А ты связал свою переменную с этим Edit'ом?

2.0K
03 марта 2006 года
Bigzone
49 / / 18.08.2004
Цитата:
Originally posted by AndreySar
А ты связал свою переменную с этим 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 точно также сделан но работает.

324
03 марта 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by Bigzone
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. Для этого передавай ссылку на переменную

2.0K
03 марта 2006 года
Bigzone
49 / / 18.08.2004
Цитата:
Originally posted by AndreySar
У тебя и не должно работать. Ты создаешь новую переменную, которая не связана с окошком Edit. Для этого передавай ссылку на переменную


Э мне нужно чтобы из потока я мог обращаться и к List и к Edit
Ну сделал так
//*****************
class CEditAndList
{
public:
CEditAndList();
CListBox List;
CEdit* Edit;
};
В потоке
//************
cb->Edit->SetWindowText("ok");

конструктор
//************

CEditAndList::CEditAndList()
{
Edit = new CEdit();
}

за потокм присваиваю все нормально
в потоке ошибка

324
03 марта 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by Bigzone
Э мне нужно чтобы из потока я мог обращаться и к List и к Edit
Ну сделал так
//*****************
class CEditAndList
{
public:
CEditAndList();
CListBox List;
CEdit* Edit;
};
В потоке
//************
cb->Edit->SetWindowText("ok");

конструктор
//************

CEditAndList::CEditAndList()
{
Edit = new CEdit();
}

за потокм присваиваю все нормально
в потоке ошибка



В потоке ты работаешь с новым экземпляром Edit, а не с тем который ты передаешь в качестве параметра. Прочитать у тебя получится, а вот записать нет

2.0K
03 марта 2006 года
Bigzone
49 / / 18.08.2004
Цитата:
Originally posted by AndreySar
В потоке ты работаешь с новым экземпляром Edit, а не с тем который ты передаешь в качестве параметра. Прочитать у тебя получится, а вот записать нет


ок
а как можно поступить тады ?

324
03 марта 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by Bigzone
ок
а как можно поступить тады ?



Попробуй что то типа этого:

 
Код:
UINT MyF1(LPVOID pParam)
{
    //CEditAndList *cb=(CEditAndList*) pParam;
    (CEditAndList*) pParam->List.GetText(1,Path);
    (CEditAndList*) pParam->Edit.SetWindowText ("ok");
    return 0;
}
2.0K
03 марта 2006 года
Bigzone
49 / / 18.08.2004
Цитата:
Originally posted by AndreySar
Попробуй что то типа этого:
 
Код:
UINT MyF1(LPVOID pParam)
{
    //CEditAndList *cb=(CEditAndList*) pParam;
    (CEditAndList*) pParam->List.GetText(1,Path);
    (CEditAndList*) pParam->Edit.SetWindowText ("ok");
    return 0;
}


Попробовал таже ошибка

324
03 марта 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by Bigzone
Попробовал таже ошибка



Похожую конструкцию написал вроде работает. Кстати, где в свою функцию ты передаешь CEditAndList* qwe?

2.0K
03 марта 2006 года
Bigzone
49 / / 18.08.2004
Цитата:
Originally posted by AndreySar
Похожую конструкцию написал вроде работает. Кстати, где в свою функцию ты передаешь CEditAndList* qwe?


в основной форма там где располагаються эти элементы.

7.9K
03 марта 2006 года
uki_
122 / / 26.01.2006
Тебе сперва нужно получить указатель на те контролы. Напр.:
Код:
class CEditAndList
{
  public:
  CListBox *List;
  CEdit    *Edit;
};
...
...
CEditAndList eal;
eal.List = (CListBox *)GetDlgItem(IDC_LIST1);
eal.Edit = (CEdit *)GetDlgItem(IDC_EDIT1);
324
03 марта 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by Bigzone
в основной форма там где располагаються эти элементы.



Как ты их передаешь ? Выслать проект можешь?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог