Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Список TListView для очереди закачки


Автор: Alca 27.10.2009, 16:37
Как организовать список TListView для очереди закачки?

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

В то время пока качается файл, возможны добавления, удаления, перемещения строк в TListView.
Как мне рационально синхронизировать данные в потоке и с данными в списке,
чтобы при изменении в TListView информация из потока выводилась в нужную строку списка?

Добавлено через 8 минут и 29 секунд
Если надо код, то могу выложить.

Автор: Anikmar 27.10.2009, 18:58
Цепляться не к индексу, а к полю Object или Tag (если оно там есть, не помню).

Автор: Alca 27.10.2009, 19:09
за Tag айтема?

Добавлено через 1 минуту и 50 секунд
У айтема нет Tag-а

Автор: Anikmar 27.10.2009, 19:11
Цитата(Alca @  27.10.2009,  19:09 Найти цитируемый пост)
У айтема нет Tag-а 

Значит за Object

Автор: Alca 27.10.2009, 19:13
Цитата

Значит за Object

тож нет

Добавлено через 3 минуты и 49 секунд
Цитата

Цепляться не к индексу, а к полю Object или Tag

А как потом искать айтемы по тэгу? Циклить что-ли?

Автор: Anikmar 27.10.2009, 20:49
Цитата(Alca @  27.10.2009,  19:13 Найти цитируемый пост)
А как потом искать айтемы по тэгу? Циклить что-ли? 

Ну да... А что их там десятки тысяч?

Добавлено через 4 минуты и 55 секунд
Цитата(Alca @  27.10.2009,  19:13 Найти цитируемый пост)
Цитата
Значит за Object
тож нет


Сейчас посмотрел - там это поле наывается Data.

Интересно, почему они в части компонентов Object делали, а в части Data. Видимо был глубокий смысл, которого я не понял...

Автор: Alca 27.10.2009, 21:54
Цитата

А что их там десятки тысяч?

Порядка 100.

Добавлено через 4 минуты и 31 секунду
И обновляются 3-4 записи в секунду

Автор: Alca 27.10.2009, 22:26
Попробую скрестить это:
Код

class PASCALIMPLEMENTATION TListItem : public Classes::TPersistent
{ 
    //...
    __property void * Data = {read=FData, write=SetData};
    //...
    TListItem* __fastcall FindData(int StartIndex, void * Value, bool Inclusive, bool Wrap);
    //...
}

Автор: Anikmar 27.10.2009, 22:53
Может адрес итема держать где-то в своем объекте и не по индексу к нему доступаться, а по адресу? Или адреса итемов меняются при перестроении списка?

Автор: Alca 27.10.2009, 22:57
Цитата

Или адреса итемов меняются при перестроении списка?

Похоже, что да. Я так пробывал.

Автор: Alca 28.10.2009, 00:15
http://bcbjournal.org/articles/vol4/0001/Fast_updates_with_virtual_list_views.htm

Автор: Alca 28.10.2009, 01:13
Решил проблему с помощью:
Код

class PASCALIMPLEMENTATION TListItem : public Classes::TPersistent
{ 
    //...
    __property void * Data = {read=FData, write=SetData};
    //...
    TListItem* __fastcall FindData(int StartIndex, void * Value, bool Inclusive, bool Wrap);
    //...
}

Anikmar, спасибо за идею.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)