Форум: "Основная";
Текущий архив: 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.037 c