Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление строки и потоки, Как отвязаться от номера строки 
:(
    Опции темы
ZBugz
  Дата 12.4.2010, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Всем привет. Помогите  smile 
Смысл вот в чем. Есть ListView, в нем задания, выделяю что надо, запускаю, по окончании могу удалить, а могу и руками удалить выделенную строку. При смещении элементов, меняеться ItemIndex. Ну в итоге в потоке они друг на друга лезут и все зависает. 
Мне надо что бы в потоке во всех Synchronize() вывлдилась инфа по конкретной строке, поэтому я привязался к строке, но потом понял что при удалении, даже если пройтись по списку и переназначить Index то возможно где то он измениться все равно.
Говорят что можно написать используя Lv.Data. Я вообще не понял как это делать...
Помогите  smile 
Пример прилогаю, мне бы с пояснениями и желательно максимально сохранить струтуру кода.

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  ____.rar 8,18 Kb
PM MAIL   Вверх
Akella
Дата 12.4.2010, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(ZBugz @  12.4.2010,  14:35 Найти цитируемый пост)
выделяю что надо, запускаю, по окончании могу удалить, а могу и руками удалить выделенную строку. 

Уже не раз писали, что удалять нужно от конца к началу, а не от начала к концу. Цикл организовать нужно от конца к началу.

Добавлено через 2 минуты и 19 секунд
Я, честно говоря, не понял, при чём здесь потоки? Можешь пояснить? Как связано удаление строк из ListView с потоками? И ещё вопрос. А может замечание. Вопросы по организации циклов по ListView лучше задавать в разделе для новичков ;) 
PM MAIL   Вверх
ZBugz
Дата 12.4.2010, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Цитата

Уже не раз писали, что удалять нужно от конца к началу, а не от начала к концу. Цикл организовать нужно от конца к началу.

Так, это я сделаю smile Впринципе так раньше и было smile Зачем то исправил  smile 
Цитата

Я, честно говоря, не понял, при чём здесь потоки? Можешь пояснить? Как связано удаление строк из ListView с потоками? И ещё вопрос. А может замечание. 

Значит так, выделяю задания, они ухоодят в поток, выполняються, от каждого задания в его строчку пишу данные, типа сколько процентов выполнено. В момет выполнения я заходл удалить строку, удалил. Последующие строки сдивнулись, отображение информации соответственно должно тоже сдвинуться, я это сделал. А вот если поток завершился, к примеру 2-е задание раньше чем 1-е и т.д. То оно по окончании удаляеться, но так как задание (строка), к примеру 3, тоже завершилось и тоже встало в очередь на удаление, а ItemIndex уже поменялся, то в итоге задание отписывает что оно завершенно в тот itemIndex, которого уже нету. Ну и получаем ошибку.

Цитата

Вопросы по организации циклов по ListView лучше задавать в разделе для новичков ;)

Да тут впринципе не о нем речь.

Добавлено через 1 минуту и 5 секунд
Проблема в том, что информацию я вывожу от номера строки, по другому просто не умею :( 
PM MAIL   Вверх
Akella
Дата 12.4.2010, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(ZBugz @  12.4.2010,  16:08 Найти цитируемый пост)
Значит так, выделяю задания, они ухоодят в поток, выполняються, от каждого задания в его строчку пишу данные, типа сколько процентов выполнено. В момет выполнения я заходл удалить строку, удалил. Последующие строки сдивнулись, отображение информации соответственно должно тоже сдвинуться, я это сделал. А вот если поток завершился, к примеру 2-е задание раньше чем 1-е и т.д. То оно по окончании удаляеться, но так как задание (строка), к примеру 3, тоже завершилось и тоже встало в очередь на удаление, а ItemIndex уже поменялся, то в итоге задание отписывает что оно завершенно в тот itemIndex, которого уже нету. Ну и получаем ошибку.

Ты выполняешь это всё в потоке? Или ты не понимаешь, что такое поток - THREAD?

Или я не могу догнать, в чём у тебя проблема. Многабукаф - мало толку.

Цитата(ZBugz @  12.4.2010,  16:08 Найти цитируемый пост)
Да тут впринципе не о нем речь.

Кхм... тогда о чём?

Добавлено через 1 минуту и 6 секунд
Цитата(ZBugz @  12.4.2010,  14:35 Найти цитируемый пост)
Мне надо что бы в потоке во всех Synchronize() вывлдилась инфа по конкретной строке,

Ага, значит речь именно о потоках smile. Начинает доходить. smile

Добавлено через 2 минуты и 34 секунды
Цитата(ZBugz @  12.4.2010,  14:35 Найти цитируемый пост)
Говорят что можно написать используя Lv.Data. Я вообще не понял как это делать...

Да, в Data можно записать какой-нибудь уникальный код, когда ты добавляешь очередную строку.
PM MAIL   Вверх
Akella
Дата 12.4.2010, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



user posted image
Обрати внимание на нумерацию справа.

Я создал по порядку все строки в списке. Потом удалили несколько нечётных. Затем скопировал в мемо всё. При чём номера строк в мемо брал из Data.
Проект прикрепил.

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  lv.zip 6,83 Kb
PM MAIL   Вверх
Akella
Дата 12.4.2010, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Проект был создан на Delphi 2007

Это сообщение отредактировал(а) Akella - 12.4.2010, 21:41
PM MAIL   Вверх
ZBugz
Дата 13.4.2010, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Цитата(Akella @ 12.4.2010,  21:30)
Я создал по порядку все строки в списке. Потом удалили несколько нечётных. Затем скопировал в мемо всё. При чём номера строк в мемо брал из Data.
Проект прикрепил.

Я так делал. Та то работает. Мне бы как в моем поекте smile Там чуток по другому smile 
PM MAIL   Вверх
Akella
Дата 13.4.2010, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(ZBugz @  13.4.2010,  09:25 Найти цитируемый пост)
Я так делал. Та то работает.


тогда поясни, к чему был этот вопрос  smile 
Цитата(ZBugz @  12.4.2010,  14:35 Найти цитируемый пост)
Говорят что можно написать используя Lv.Data. Я вообще не понял как это делать...


PM MAIL   Вверх
ZBugz
Дата 13.4.2010, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Я имел ввиду что бы прям в дату весь поток запихнуть (потом, когда надо удалить поток\строку) и выводить информацию от тех параметров которые я в поток передал не привязываясь к строке.
PM MAIL   Вверх
Akella
Дата 13.4.2010, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(ZBugz @  13.4.2010,  13:09 Найти цитируемый пост)
Я имел ввиду что бы прям в дату весь поток запихнуть

Ты хоть посмотрел какой тип имеет Data? И я не представляю, как в переменную можно запихнуть поток?? (если бы Data была переменной)
PM MAIL   Вверх
Mikel
Дата 13.4.2010, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 882
Регистрация: 30.3.2002
Где: Саратов

Репутация: 1
Всего: 2



В Data можно запихнуть хоть паровоз smile Только создав его сначала, а потом в Data поместить указатель на паровоз smile


--------------------
...so remember, it's better to burn out than to fade away
PM MAIL ICQ   Вверх
ZBugz
Дата 14.4.2010, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Цитата(Akella @ 13.4.2010,  15:34)
Ты хоть посмотрел какой тип имеет Data? И я не представляю, как в переменную можно запихнуть поток?? (если бы Data была переменной)

Mikel прав. Запихиваеться легко, я пробывал  smile Работает.

Но суть не в этом, меня  это не устраивает по другим причинам. Я сегодня отпишу, как только проверю одну весчь от Akella
PM MAIL   Вверх
Akella
Дата 14.4.2010, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Data - это указатель, потому поток туда не запихнёшь ;)
PM MAIL   Вверх
ZBugz
Дата 14.4.2010, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 636
Регистрация: 15.2.2006
Где: Москва

Репутация: 6
Всего: 6



Цитата(Akella @ 14.4.2010,  09:01)
Data - это указатель, потому поток туда не запихнёшь ;)

Блин, я в шоке  smile 

Короче, все сделал типа так:

Код

  for j:= 0 to Lv.Items.Count-1 do
   begin
    CT[idx] := TThread.Create(Lv.Items[j], idx);
    Lv.Items[j].Data:=CT[idx];
    CT[idx].Start;
   end; 

Гиде CT это массив CT: array [1..2000] of TThread; и idx это номер потока

Так вот, 0 и 1 строка нормально отображаеться, а все что выше, почему то сьежает ниже через строку... smile 

Короче, берем 2-е задание, нажимаю выполнить, до CT[idx].Start и в потоке в Create N.Index=2 (N: TListItem), в Execute попадает как N.Index=3. И это только тогда, когда я добавил задания в чистый ListView, если загрузить с заданиями, то ниче не двигаеться.

Шё це такэ ? smile  Поможите  smile 

Это сообщение отредактировал(а) ZBugz - 14.4.2010, 14:03
PM MAIL   Вверх
Akella
Дата 14.4.2010, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(ZBugz @  14.4.2010,  14:02 Найти цитируемый пост)
Data - это указатель, потому поток туда не запихнёшь ;)

Блин, я в шоке  smile 


и всё равно засовываешь TThread в Pointer
Цитата(ZBugz @  14.4.2010,  14:02 Найти цитируемый пост)
 Lv.Items[j].Data:=CT[idx];


Добавлено через 49 секунд
Это называется "Впихнём невпихуемое", да?

Добавлено через 1 минуту и 31 секунду
Продолжай в том же духе. За упорство Ктулху тебя вознаградит.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0619 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.