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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.043 c
1-1105624513
horse
2005-01-13 16:55
2005.01.23
TRegistry


1-1104762803
GanibalLector
2005-01-03 17:33
2005.01.23
ИМЯ файла...


4-1101809308
starling13
2004-11-30 13:08
2005.01.23
Диалог выбора директории


4-1102227722
Dema-X
2004-12-05 09:22
2005.01.23
Ширина текста.


3-1103629763
sesh
2004-12-21 14:49
2005.01.23
Excel --> Database





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский