Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.09.01;
Скачать: [xml.tar.bz2];

Вниз

Проблемы с TThread...   Найти похожие ветки 

 
ZDima   (2003-08-16 14:35) [0]

Господа, помогите разобраться с нитями(TThread) - я начал изучать их вчера и наклепал такую программу:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, StdCtrls;

type
TMyThread = class(TThread)
private
{ Private declarations }
protected
procedure DoWork;
procedure Execute; override;
end;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
t:TMyThread;
implementation
{$R *.dfm}

procedure TMyThread.Execute;
begin
Synchronize(DoWork);//<--когда пишу Synchronize
//форма не обрабатывает события
//DoWork; //<--когда не пишу
//выскакивает ошибка
//"Out of system resources"
//Что делать??? :(((
t.FreeOnTerminate:=true;
t.Free;
end;

procedure TMyThread.DoWork;
var i:integer; b:TBitmap;
j:TJPEGImage;
begin
//------Save------------
CreateDir("c:\zdima\");
b:=TBitmap.Create;
j:=TJPEGImage.Create;
b.Width:=200; //тут пиши любые числа
b.Height:=200;//в зависемости от быстродействия компа
for i:=1 to 101 do begin
b.Canvas.Pen.Color:=random($FFFFFF);
b.Canvas.MoveTo(random(200),random(200));
b.Canvas.LineTo(random(200),random(200));
j.Assign(b);
j.Compress;
j.SaveToFile("c:\zdima\"+inttostr(i)+".jpg");
end;
b.Free;
j.Free;
Form1.Caption:="Done";
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
t:=TMyThread.Create(false);
end;
end.

Как видите всё предельно просто, но вот кода пишешь Synchronize(DoWork);(см. код) приложение не обрабатывает сообщения- только после выполнения кода в TMyThread.DoWork; а если написать просто
DoWork; появляется ошибка "Out of system resources"...
Подскажите, что я не так делаю... Вобщем как сделать, чтобы работало???
P.S. ответ лучше в виде кода...


 
Романов Р.В.   (2003-08-16 14:43) [1]

Неудачный пример для изучения потоков.
Synchronize(DoWork) выполняется в контесте основного потока и соответственно все другие процедуры основного потока "отдыхают", в том числе и обработчики сообщений.
Если вызыаешь просто DoWork, убери Form1.Caption:="Done" или помести его в отдельную процедуру которую вызывай через Synchronize


 
¤ZDima¤   (2003-08-16 15:15) [2]

Спасибо



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.09.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.011 c
1-1367
Боян Георгиев
2003-08-17 18:08
2003.09.01
Как получить имя keyboard layot-a?


1-1431
vitnt
2003-08-19 10:09
2003.09.01
Как программно прокрутить memo на последнюю строку?


6-1545
P@SHA
2003-06-26 12:59
2003.09.01
TNmSmtp


14-1554
Карелин Артем
2003-08-11 11:40
2003.09.01
Методики оценки неоходимого количества выпивки и закуски.


3-1275
Denis Tkachov
2003-08-11 11:59
2003.09.01
проблема с созданием тригера





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский