Баг. Need help
При открытии формы идет динамическое заполнение всех компонентов на всех GroupBox-ах. Проблема возникает тогда, когда пытаешься выбрать из TreeView показ другого GroupBox-а - программа виснет и ни на что не реагирует. Как лечить?
А как ты делаешь показ определённого GroupBox-а?
GroupBox->Visible=true;
все остальные - false;
Дело в том, что когда нет динамического заполнения данных, все работает нормально.
GroupBox->Visible=true;
все остальные - false;
Дело в том, что когда нет динамического заполнения данных, все работает нормально.
Каким образом выполняется заполнение группы?
Каким образом выполняется заполнение группы?
При создании формы идет запрос данных по сети.
Потом в отдельном потоке принимаются данные, которые заполняют компоненты Edit,Memo.. etc.
При создании формы идет запрос данных по сети.
Потом в отдельном потоке принимаются данные, которые заполняют компоненты Edit,Memo.. etc.
Поток создан средствами языка или API? Синхронизация как обеспечивается?
Компоненты "Edit,Memo.. etc" уже присутствуют в группе или создаются также динамически?
---- если код невелик - покажи
Покажи фрагмент кода. А может у тебя потоки не синхронизированы. Я точно не помню, но там вроде их надо связывать с помощью специальной функции.
Принцип такой:
{
Form->Show();
RequestData()
CreateThread(...,RecieveData,...);
}
RecieveData()
{
recv(s,data,1024,0);
ParseData(data);
Form->GroupBox->Edit->Text=data;
}
У тебя этот глюк даже если поток - один? Попробуй запустить только один поток и проверь - не зависает ли. Если при одном потоке - все ок, значит ставь синхронизацию - самая простая мутекс или семафор, как тебе нравится.
Там всего один поток юзается. Т.е. такие глюки при одном потоке
тогда не очень понятно почему... я написал легкий пример - с одним потоком, все работает. Попробуй убрать на время работу с сокетами - может ошибка с ними? Попробуй для начала без них.
Без потоков все работает. Но дело не совсем в этом - дебагом я вижу, что нужные данные поступают, и заполняются на определенных компонентах. Глюк проявляется тогда, когда я пытаюсь сделать один GroupBox видимым, а остальные спрятать, это происходит как во время заполнения данными, так и после. Если ничего не заполнять (выключить получение данных), то все нормально работает.
Ну а если сначало получить все данные, закрыть поток а затем делать что то видимым. Если данные получаются долго то сдесай ПРОГРЕССБАР
Спасибо всем, вылечилось добавлением переменной-флагом принятия всех данных. После этого идет заполнение и все ок.