Понятие программирование, программирование, языки программирования, книги программирование На сайте представлена информация про программирование в Интернете и работу  

Как остановить приложение?, Хелп
Горячие клавишы
Время в tstatusbar
ListView
Повторный запуск уже работающей программы, Как заблокировать повторный запуск
Как защитить исходники?
Помогите с потоком!, (ошибка синхронизации?)
Как корректно измерить длину и размер, динамического массива?
Свернуть в Tray чужую прогу, Блин как сделать подскажите плиз
Ассоциация файла с прогой
Шифрование...
Чтение файла с Handle
Функции очистки массива
использование памяти
несколько о TMemo, TMemo memo поиск текст увеличить объем
Рег. выражения?, есть ли такое
Преобразовать integer в array of byte
Как Вы относитесь к курящим девушкам?
Ошибка ввода-вывода
Запрет запуска дубля программы, Без THandle
Как у меньшить размер приложения?
TListView and Drag&Drop
Поверх других, окна, прогри, поверх, под
использование памяти
Как в Excel скопировать формат ячеек?
Новый тип файла, новое расширение файла
Как сделать жадать нажатия клавиши, В Паскале Readkey, в модуле CRT, а тут?
Как отловить изменение раскладки клавиатуры
RasAPI вот она!, Дозвон до провайдера
Удалить содержимое файла, как ?
Работа с TListView
Передача (пароль,логин) при Dial-Up?
FTP клиент стандартными компонентами Delphi
Запустить другую прогу скрытой
Как в Task manager'e убить процесс?
Помогите найти таблицу кодов ANSI
Lookup в обычном Grid'e, Почему-то не работает
Люди подскажите ссылку........, А то у нас в городе не найдешь .........
RichEdit, Форматирование текста
Запись в файл - помогите, а то скоро уже клаву молотком убью
Программирование портов в Windows XP
RichEdit, Программный скроллинг
Ярмарка вакансий Samsung Electronics, Работа и обученией с компанией
Не правилная форма
WinApi для работы с Delphi7
Где можно взять компоненты для Delphi?
Как убрать программу из списка задач в WindowXP?
Описание kernel32.dll Windows XP
Построение графика, по оси X - текущее время
TLabel c прозрачным фоном...
Может кто подскажет?
Работа с COM-портом, Подскажите...
Программирование портов в Windows XP
Работа с COM-портом, Подскажите...
О самом выдающемся
dbGrid сбрасывает выделеные строки
IdHTTP или IdFTP UPLOAD, Пожалуйтса скореее помогите
DBGrid и еговозможности, DBGrid и еговозможности
Делаю подсветку синтаксиса html но где-то бага!!
Код на Паскале, Как будет на дельфи
AES128
Обработка событий, для динамически генерируемых компонент
SQL запрос..., Помогите.
Как Вы относитесь к курящим девушкам?
Функция Windows.WriteFile, Вопрос...
COM-порт + Модем
Midi forms and Com Port
Время показа hint., Обычный хинт в обычной форме...
Хук не получается сделать...
дата установки виндов

Платные хостинги     Раскрутка сайта     Книги по программированию


Помогите с потоком!, (ошибка синхронизации?)

Только здесь 1000 посетителей на Ваш сайт всего за 3 у.е.!

- Я заношу из базы данных в TListView данные, и подгружаю к итемсам картинки. Сначала я всё делал в основном потоке, и ошибок не взникало, но было подтомраживание, неудобсва, поэтому я решил вынести часть кода, который загружает картинки, в отдельный поток. Тут и полезла одна ,но очень странная ошибка: EOutOfResources with message 'The reauested resource is in use'. Если во время загрузки ничего не делать с TListView , то вроде всё нормально, но если его скроллишь, или ещё что-нибудь делаешь (толком я не понял), то иногда возникает эта ошибка... Судя по тексту ошибка может тут поток юзает что-то, пока это занято основным потоком? Но что?Привожу мини-приложение, где возникает ошибка (есть только это, ничего не вырезал на всякий случай)Код unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, DB, DBTables, StdCtrls, ComCtrls, ExtCtrls, ImgList;type  TForm1 = class(TForm)    DataSource1: TDataSource;    Query1: TQuery;    Image1: TImage;    ListView1: TListView;    Edit1: TEdit;    Button1: TButton;    Button2: TButton;    ImageList1: TImageList;    procedure Button1Click(Sender: TObject);procedure additem_(sender: TObject; Name_ : String; tag : integer );  private    { Private declarations }  public    { Public declarations }  end;var  Form1: TForm1;  thum_images_:integer;  const dbname =  'D:\DolphinImages.DB';implementationuses Searchthread;{$R *.dfm}procedure tform1.additem_(sender: TObject; Name_ : String; tag : integer );var new:tlistitem;beginnew := ListView1.Items.Add;new.Indent:=tag;new.Caption:=Name_;end;procedure TForm1.Button1Click(Sender: TObject);var sqltext,sqlquery:string; i:integer;beginListView1.Clear;ImageList1.Clear;sqltext:=edit1.text;sqlquery:='SELECT * FROM "'+dbname+'"';sqlquery:=sqlquery+' WHERE FileName like '''+sqltext+'''';Query1.sql.text:=sqlquery;Query1.active:=true;Query1.First;for i:=1 to Query1.RecordCount dobeginadditem_(sender, Query1.FieldByName('Name').asstring, Query1.FieldByName('ID').asinteger );Query1.Next;  end;  Search_thread.Create(false);end;end.highlightSyntax('delphijBhODY','delphi');и сам поток:Код unit Searchthread;interfaceuses Dialogs, Classes,DBGrids,DB, DBTables,  SysUtils,ComCtrls, Graphics, jpeg;type  Search_thread = class(TThread)  fitem: TListItem;  findex:integer;  fbit:Tbitmap;  fpic:tpicture;  fQuery: TQuery;  fDataSource: TDataSource;  private  procedure  setimageindex;  procedure addimagetolist;    { Private declarations }  protected   procedure Execute; override;  end;implementation{ Search_thread }uses Unit1;procedure Search_thread.setimageindex;begin fitem.ImageIndex:=findex;end;procedure Search_thread.addimagetolist;begintryform1.ImageList1.Add(fbit,nil);excepton E: Exception do begin Search_thread.Create(true); showmessage(E.Message); end;end;end;procedure Search_thread.Execute;   var  fbs:TBlobStream;   i:integer;begin  fQuery:=TQuery.Create(nil);  fDataSource:=TDataSource.Create(nil);  fDataSource.DataSet:=fQuery;  fQuery.DatabaseName:='DolphinAlias';  fbit:=Tbitmap.create;  fbit.PixelFormat:=pf24bit;  fbit.Width:=100;  fbit.Height:=100;  fbit.Canvas.Brush.color:=clwhite;  fbit.Canvas.pen.color:=clwhite;  fpic:=tpicture.create;  fpic.Graphic:=TJPEGImage.Create;  fbit.canvas.rectangle(0,0,100,100);  fbit.canvas.Draw(50 - form1.image1.picture.Graphic.Width div 2,50 - form1.image1.picture.Graphic.height div 2,form1.image1.picture.Graphic); //картинка по умолчанию, пока не загрузилось то, что надо  Synchronize(addimagetolist);  thum_images_:=0; with form1 do  begin  for i:=1 to listview1.Items.Count do  if listview1.Items[i-1].ImageIndex=0 then  begin  try  fQuery.Active:=false;  fQuery.sql.text:='SELECT * FROM "'+dbname+'"'+' WHERE ID='''+inttostr(listview1.Items[i-1].Indent)+'''';  fQuery.active:=true;  except   Showmessage('Point 1')  end;  try   fbs:=TBlobStream.Create(TBlobField(fQuery.FieldByName('thum')),bmRead);   if fbs.Size<>0 then   fpic.Graphic.loadfromStream(fbs);   fbs.Free;  except   Showmessage('Point 2')  end;  tryfbit.canvas.rectangle(0,0,100,100);fbit.canvas.Draw(50 - fpic.Graphic.Width div 2,50 - fpic.Graphic.height div 2,fpic.Graphic);inc(thum_images_);fitem:=listview1.Items[i-1];findex:= thum_images_;  except   Showmessage('Point 3')  end; trySynchronize(addimagetolist);Synchronize(setimageindex);  except   Showmessage('Point 4')  end; end; end; fbit.free; fpic.Free; fQuery.Free; fDataSource.Free;end;end.highlightSyntax('delphiI1NTU5Y','delphi');ошибка вылетает в addimagetolist, но компилятор её не отлавливает толком, только изза секции try можно мпонять, что ошибка возниикает именно там. Я вроде бы выполнил Synchronize, но что-то тут ещё... Люди, помогите!!!

- Эх, никто не в курсе... Пришлось разбираться самому. Для тех, кому интересно, что же тут было: всё исправилось изменением процедур в нити:Код procedure Search_thread.setimageindex;beginfitem.ImageIndex:=thum_images_;SendMessage(form2.listview1.handle, LVM_SETIMAGELIST, LVSIL_NORMAL, Longint(form2.imagelist1.handle));end;highlightSyntax('delphijVmN2Y','delphi');иКод procedure Search_thread.addimagetolist;var fmask, fim:tbitmap;beginfmask:=tbitmap.create;fim:=tbitmap.create;fim.Assign(fbit);ImageList_Add(form2.imagelist1.Handle,fbit.Handle, fmask.Handle);fim.Free;fmask.Free;end;highlightSyntax('delphijc1MTU1','delphi');Но интересно, как же классифицировать ошибку... Прошлый глюк бы по-моему из-за следующего: при изменении в имэйджлист, как то добавлении лементов), перерисовывалось одновременно содержимое листвьюва, причём это присходило с помощью внутренней процедуры имэйджвьюва change, которая было объявлена как динамическая... По-моему метод синхронизе не очень точно работал с этим динамическим метедом и иногда из-за этого и происходила ошибка. при использовании ImageList_Add имэйджлист не вызывает метод change, и ошибка пропадает...

Интернет казино     Онлайн игры     Увеличение члена     Купить DVD


Главная страница | понятие программирование | программирование звука | современное программирование | принципы программирования | модульное программирование | дипломная программирование | уровень языка программирования | развитие программирования | программирование visual c | программирование lpt | кнут программирование | язык программирования паскаль | unix программирование | самоучитель программирования | программирование шпора | программирование кпк | программирование sql | программирование 1c | алгоритмическое программирование | directx программирование | сокеты программирование | исходники программирование | классификация языков программирования | shell программирование | программирование pdf | Ссылки

Все про развитие программирования