Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.23;
Скачать: CL | DM;

Вниз

Опять потоки.   Найти похожие ветки 

 
Gear   (2005-01-13 10:41) [0]

Создал компонент в, котором в отдельном потоке кидаются UDP пакеты в большом количестве. Тем самым добился, чтобы форма оставалась свободной и с ней можно было работать. Её можно таскать по экрану и т п, а UDP пакеты как сыпались так и сыпятся. Но вот проблема. Если нажать на этой форме в шапке кнопку максимизации минимизации мышкой и удерживать кнопку, то пакеты перестают (!) кидаться пока кнопку мыши не отпустишь. И так же возникают короткие перерывы, когда сворачиваешь и разворачиваешь форму. Где тут неправда?


 
Verg ©   (2005-01-13 10:43) [1]

Synchronize


 
sniknik ©   (2005-01-13 11:16) [2]

> Synchronize
а не архангельский? ;о)))

... игра в телепатию.


 
TUser ©   (2005-01-13 11:24) [3]

Действительно, дополнительный тред тормозится при удержании этих кнопок, хотя полностью не останавливается.
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

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

 TMine = class(TThread)
  private
   FHandle: hWND;
   procedure Get;
  public
   procedure Execute; override;
  end;

var
 Form1: TForm1;
 Mine: TMine;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 Mine:=TMine.Create(true);
 Mine.FreeOnTerminate:=true;
 Mine.Resume;
end;

procedure TMine.Get;
begin
 FHandle:=Application.Handle;
end;

procedure TMine.Execute;
var i: integer;
begin
 Synchronize(Get);
 for i:=0 to 100000 do begin
   FlashWindow(FHandle,true);
   sleep(1000);
   FlashWindow(FHandle,false);
   end;
end;

end.


 
Gear   (2005-01-13 11:45) [4]

TO:TUser
Да, совершенно верно. Он тормозится но потом продолжает работать. Вышеуказанный код решает проблему?


 
sniknik ©   (2005-01-13 12:04) [5]

> Вышеуказанный код решает проблему?
вот это вряд ли. ;)
а для решения можно попробовать повысить приоритет потоку (без гарантий, проверь).


 
Gear   (2005-01-13 12:05) [6]

Тут ещё вот какая беда. В этом потоке в бесконечном цикле крутится обработка UDP пакетов и поэтому видимо Synchronize тут не поможет?

procedure TBlaThreadRcv.Execute;
begin
  FBla.ReceiveWork;
end;

...
procedure TBla.ReceiveStreamStart;
begin
 FBlaThreadRcv := TBlaThreadRcv.Create(Self);
end;
...
procedure TBla.ReceiveWork;
...
while ( pack <> nil) do
           begin
             ...
             //Работа
           end
...


 
Alexander Panov ©   (2005-01-13 12:06) [7]

Gear   (13.01.05 11:45) [4]

Если приведшь хотя бы немного кода потока(синхронизация), то тогда можно будет говорить о помощи.


 
sniknik ©   (2005-01-13 12:16) [8]

> Если приведшь хотя бы немного кода...
этого > Gear   (13.01.05 12:05) [6] явно недостаточно ;о))
хотя, если проблема в том что сама система выделяет меньше ресурсов при ожидании нажатия этих кнопок (а похоже это так и есть, подозреваю) то 100% это не решиш. улутшить положение, если в твоем коде чтото не так это да, можно.


 
Gear   (2005-01-13 12:28) [9]

To: sniknik
>этого > Gear   (13.01.05 12:05) [6] явно недостаточно ;о))
Кода который я привёл для того, чтобы понять проблему или само качество кода?
Какие могут быть другие варианты кроме приоритета?


 
sniknik ©   (2005-01-13 12:28) [10]

аааа... ;о) не поможет ничего... проверка (после поста) в голову пришла. нажми и удерживай эту(одну из) кнопку в експлорере, у него при этом даже банеры останавливаются!!!! ;о))) (тоже в потоках обновление крутятся)

единственное надежда что это только для обновлений формы, и на сеть не влияет.


 
sniknik ©   (2005-01-13 12:30) [11]

Gear   (13.01.05 12:28) [9]
у холодильник сломанный, что?
...
а, да! он белый!

поймеш?


 
Verg ©   (2005-01-13 13:33) [12]


> Gear   (13.01.05 12:05) [6]
> Тут ещё вот какая беда. В этом потоке в бесконечном цикле
> крутится обработка UDP пакетов и поэтому видимо Synchronize
> тут не поможет?


1. Про synchronize - это как раз от его применения могут случаться такие вещи.
2. Какими компонентами пользуешься для обработки UDP пакетов? Не используют ли они асинхронного (WSAAsyncSelect) режима сокетов?


 
Gear   (2005-01-13 15:01) [13]

Подразобрался  :) в своём коде. На самом деле вроде как проблема не в приёме UDP и в его обработке а в отправке. Снифером вижу что пакеты не отправляются. А отправляться они должны когда получаем заполненный буфер ACM. Походу с микрофона звук перестаёт идти в буфер этот момент. :(


 
Erik1 ©   (2005-01-13 15:05) [14]

Да снесита эти кнопки на основной форме если тебе так критична скорость работы программы. Если надо сделай свои.


 
Gear   (2005-01-13 15:19) [15]

А дело в том, что при минимизации, а так же при перерисовке окна всё равно дергается звук.


 
Erik1 ©   (2005-01-13 16:51) [16]

Запрети перерисовку!



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

Текущий архив: 2005.01.23;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.025 c
14-1104695408
juice
2005-01-02 22:50
2005.01.23
Фоновый скрипт


4-1102398941
sh2cer
2004-12-07 08:55
2005.01.23
lpt в дельфи


1-1105254241
XAdmin
2005-01-09 10:04
2005.01.23
GetCurrentRecord(PChar), обратное преобразование


1-1105226563
reaper
2005-01-09 02:22
2005.01.23
WebBrowser и ShellListView в одном окне


3-1103550189
/glokk
2004-12-20 16:43
2005.01.23
FIBPlus (backup/restore)