Приветствуем на Форум Херсона. Форум Херсонской молодежи.. На данный момент Вы находитесь на форуме как Гость и имеете очень ограниченные возможности и права. Что бы писать или отвечать в темах, загружать картинки, файлы на форуме Вам нужно зарегистрироваться, что совершенно бесплатно. Регистрация очень быстрая, не откладывайте эту процедуру! Если возникнут проблемы с регистрацией напишите нам. |
|
Программирование Все вопросы по написанию программ |
|
Опции темы |
24.04.2008, 21:22 | #1 (Ссылка на пост) |
Извините, я на тракторе!
Пол:
|
Приоритеты потоков в Delphi
Решил поиграться с потоками, наваял на дельфе прогу
поток крутит цикл от 0 и до 1000000 и результат плюет на сом порт... смутил меня тот факт, что когда окно программы начинаеш сворачивать-разворачивать, или размеры менять или в некоторых случаях просто мышку шевелиш поток подвисает на очень короткое время, а потом снова начинает выполяться... ставил все приоритеты вплоть до Priority:=tpTimeCritical стало лучше но всеравно есть сбои при манипуляции с формой... как можно это убрать? тоесть надо чтобы прога слала данные на порт постоянно и синхронно независимо от манупуляций на компьютере
__________________
Какая разница из какого места растут руки, если они золотые. |
|
24.04.2008, 21:23 | #2 (Ссылка на пост) |
Извините, я на тракторе!
Пол:
|
да, все потоки синхронизированны как просит литература
__________________
Какая разница из какого места растут руки, если они золотые. |
|
24.04.2008, 21:27 | #3 (Ссылка на пост) |
Модератор
Пол:
|
VCL не есть thread-safe. рисовать через Synchronize
|
|
Сказали Спасибо пользователю zwitter за этот пост: | Debian (24.04.2008) |
24.04.2008, 21:35 | #4 (Ссылка на пост) |
Извините, я на тракторе!
Пол:
|
рисую через Synchronize
пример: Код:
... implementation uses unit3; {$R *.dfm} procedure TForm1.OUT1; begin i:=i+1; Label1.caption:=IntToStr(i); end; procedure TForm1.OUT2; begin i:=i+1; RS232Port.sendStr(intToStr(i)); Label2.caption:=IntToStr(i); ProgressBar1.Position:=i; end; procedure TForm1.Button1Click(Sender: TObject); var P1:TMyThread; begin P1:=TMyThread.Create(false); P1.Priority:=tpNormal; Button1.Enabled:=false; end; procedure TForm1.Button2Click(Sender: TObject); var P1:TMyThread; begin J:=False; P1.Terminate; Button1.Enabled:=true; end; procedure TForm1.Button3Click(Sender: TObject); var P1:TMyThread; begin J:=True; end; end. Код:
unit Unit3; interface uses Classes; type TThreadMethod = procedure of object; TMyThread = class(TThread) procedure Update1; procedure Update2; private { Private declarations } protected procedure Execute; override; end; implementation uses unit1, SysUtils; { Important: Methods and properties of objects in visual components can only be used in a method called using Synchronize, for example, Synchronize(UpdateCaption); and UpdateCaption could look like, procedure TMyThread.UpdateCaption; begin Form1.Caption := 'Updated in a thread'; end; } { TMyThread } Procedure TMyThread.Update1; begin Form1.OUT1; end; Procedure TMyThread.Update2; begin Form1.OUT2; end; procedure TMyThread.Execute; var k:integer; begin While not Form1.j=True do begin sleep(10); Synchronize(Update1); Synchronize(Update2); end; end; end.
__________________
Какая разница из какого места растут руки, если они золотые. Последний раз редактировалось Debian, 24.04.2008 в 21:45. |
|
24.04.2008, 22:59 | #5 (Ссылка на пост) |
Модератор
Пол:
|
а почему ты объект потока в каждой процедуре локальным делаешь ?
procedure TForm1.Button1Click(Sender: TObject); var P1:TMyThread; procedure TForm1.Button2Click(Sender: TObject); var P1:TMyThread; procedure TForm1.Button3Click(Sender: TObject); var P1:TMyThread; объяви его в классе формы. |
|
24.04.2008, 23:05 | #6 (Ссылка на пост) |
Модератор
Пол:
|
к тому же вместо While not Form1.j=True do begin
следует написать while not terminated do begin тогда метод thread.terminate отработает правильно |
|
25.04.2008, 20:49 | #7 (Ссылка на пост) |
Извините, я на тракторе!
Пол:
|
пасыба конечно
все работает но всеравно при нагрузке на систему идут сбои. видать прийдется ставить буффер дополнительный а так хотелось меньше пайки... ЗЫ видать это проблема самой системы в линуксе говорят все работает четко
__________________
Какая разница из какого места растут руки, если они золотые. |
|
Здесь присутствуют: 1 (пользователей - 0 , гостей - 1) | |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Программирование на Delphi | Evgenii | Программирование | 9 | 15.01.2008 01:04 |
Delphi - dll | Shooter | Программирование | 3 | 19.12.2007 13:56 |
Delphi. MDI приложения | Shooter | Программирование | 15 | 21.09.2007 10:33 |