![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Какой функцией "подождать" пока отработает код?
Верный вопрос © (2004-11-21 19:48:00)Какой функцией "подождать" пока отработает код перед тем как начнет выполняться следующий код?
Piter (2004-11-21 21:42:00) [21]Верный вопрос (21.11.04 20:15) [5]
у меня только один вопрос. Нафига использовать TStringList? Почему бы не хранить информацию в TListBox?
Хотя еще интересно что за секции... чего то ты намудрил
DesWind (2004-11-21 20:27:00) [22]Здесь должна хорошо подойти критическая секция модуль SyncObj если не ошибаюсь
Верный вопрос (2004-11-21 20:26:00) [23]Короче я пишу для одного сайта программу содержащую солюшены (прохождения) к играм. Игр дофига, прохождения бывают более чем на 200 страниц. Все это дело храню в одном файле таким образом :
============================
список игр
---------------
---название игры---
прохождение к ней
--=-=-=-=-=-=-=-=-=--
---название игры---
прохождение к ней
--=-=-=-=-=-=-=-=-=--
---название игры---
прохождение к ней
--=-=-=-=-=-=-=-=-=--
============================
Если быстро проходится по списку навигации, то стек переполняется.
Верный вопрос (2004-11-21 20:15:00) [24]У меня в TStringList загружается большое кол-во строк. А в ListBox загружается список навигации пл списку в TStringListе.
При кликании по элементу в ListBoxе в TStringListе происходит поиск нужной строки и переписывание данных из "сектора" (строки в TStringListе разделены на "сектора" разделителями Сектора бывают по 3-5 тыс строк) в Memo.
Так вот, если кликать по элементам ListBoxа, то все происходит прекрастно, а вот если пользователь использует для навигации кнопки Up Down то все начинает тормозить, а потом появляется сообщение - стек переполнен.
Предупреждая ответ типа : "Запретить реакцию на кнопки Up и Down" хочу сказать вот что. ListBox очень-очень долго грузит все элементы навигации потому что их слишком много, поэтому приходится держато его в другом TStringListе. А для того чтобы он не тормозил я придумал такую фишку - при загрузке я помещаю в него только 50 прервых элементов списка. Ну, короче вот :
//BaseItems - стринглист содержащий список навигации
//Label2.caption - номер элемента стоящего первым в листбоксе
//Label3.caption - номер элемента стоящего последним в листбоксе
i := strtoint(Label3.caption);
if i < 50 then exit;
if key = vk_down then
begin
if not (Label3.caption = inttostr(BaseItems.Count-1)) then
begin
ListBox1.Items.Delete(0);
ListBox1.Items.Insert(50,BaseItems.Strings[strtoint(Label3.caption)+1]);
Label3.caption := inttostr(strtoint(Label3.caption)+1);
Label2.caption := inttostr(strtoint(Label2.caption)+1);
end;
end;
if key = vk_up then
begin
if not (Label2.caption = '0') then
begin
ListBox1.Items.Delete(ListBox1.Items.Count-1);
ListBox1.Items.insert(0,BaseItems.Strings[strtoint(Label2.caption)-1]);
Label3.caption := inttostr(strtoint(Label3.caption)-1);
Label2.caption := inttostr(strtoint(Label2.caption)-1);
end else exit;
end;
end;
Надеюсь теперь стало хоть чуть яснее.
GuAV (2004-11-21 20:11:00) [25]Верный вопрос (21.11.04 19:48)
Какой функцией "подождать" пока отработает код
Код чего ?
потока, процесса ? - WaitForSingleObject.
Чего то ещё ? - в орешник !
Piter (2004-11-21 20:05:00) [26]без примера не обойтись...
Frozzen (2004-11-21 19:51:00) [27]Такая ситуация может возникнуть при многопоточном приложении
можно использовать критические секции, семофоры или мьютексы
DrPass (2004-11-21 19:50:00) [28]Если речь идет об многопоточном приложении - то обычно WaitForSingleObject. Если об обычном, то в орешник