2012-05-30 4 views
-6

У меня есть список с большим количеством предметов. Я хотел бы удалить некоторые элементы, синхронизированные. Возможно ли это? У меня есть около 100 потоков, которые одновременно получают доступ к ListView для удаления элементов из него.Синхронизированное удаление в TListView?

, например:

procedure Thread1 ; stdcall; 
var 
    item : TlistItem; 
begin 
    //... 
    item.delete; 
    //... 
end; 

procedure Thread2 ; stdcall; 
var 
    item : TlistItem; 
begin 
    //... 
    item.delete; 
    //... 
end; 

/.... and so on 

Нити уволят в то же самое время (возможно 1мс разница между ними). Затем я получаю много ошибок и AccessViolations. Пожалуйста, помогите. Спасибо :)

+5

Вы не можете получить доступ к визуальным средствам управления VCL из потоков, отличных от основного потока приложения. IDE даже вставляет комментарий, чтобы сообщить вам, что при использовании 'File | New | Other> Thread Object' автоматически. Это объясняет ошибки и нарушения доступа. (BTW, когда вы вводите «ошибка» или «нарушение доступа», ** следующее следующее **, которое вы должны ввести, - это точное сообщение об ошибке или сообщение о нарушении прав доступа, включая любые адреса памяти. Высказывание «ошибок и нарушений доступа» без Другая информация не имеет смысла. Мы не можем видеть ваш экран отсюда. :-) –

+0

Хорошо, Бенджамин. Я удалю свой второй комментарий и просто займусь вопросом, вместо того, чтобы дать вам возможность отредактировать его, чтобы улучшить его. Извините за попытку помочь. –

+0

Не могли бы вы объяснить еще раз, почему вы ставите вопрос? –

ответ

3

Если бы я был вами, я бы создал структуру данных, к которой имеет доступ основной поток приложений и все потоки обновлений, и которые могут быть синхронизированы, и что ТОЛЬКО основной поток приложения использует для обновления элемент управления VCL, если это так, как вам нужно.

+0

хороший ответ! Спасибо. –

Смежные вопросы