Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подвисание... [D7, WinXP]


Страницы:   1 2

Bes ©   (2003-09-11 01:06:00) 

Вообщем я содаю 25 потоков с одинаковыми действиями, но разными входными параметрами...

все нормально работает, но вот только программа моя подвисает пока потоки работают...

я создал еще один отдельный поток и засунул туда Application.ProcessMessage; и это тоже не помогло, как сделать так чтоб программа реагировала и не подвисала...


Bes   (2003-09-11 20:17:00) [21]

я посмотрел пример... но че та я прикола не понял...

вот мое предположение если Synchronize(DoWork) то процедура DoWork выполняется не в отдельном потоке а в главном, если же не просто в Execute"e писать какие-то действия то все выполняется в новом потоке (отдельном) так или нет ?


Verg   (2003-09-11 13:10:00) [22]

Примерчик лежит у тебя под носом:
C:\Program Files\Borland\Delphi7\Demos\Db\BkQuery\


Bes   (2003-09-11 13:00:00) [23]

2 han_malign © ну в принципе ис Priority=tpNormal; тоже самое...

2 Varg ну а как разделить их... если можно примерчик или ссылчку


Verg   (2003-09-11 12:51:00) [24]

Дык у тебя всю работу, за все 25 потоков делает один поток - главный.
Вся суть твоих потоков - это и есть нагрузить Synchronize главный поток.
Т.е. чего получается, каждому грузчику раздали по мешку, тык нет чтобы их таскать, они нашли "крайнего", и стоят в очереди к нему.... ну, чтобы он таскал по очереди их мешки.


han_malign   (2003-09-11 12:44:00) [25]

>Priority:=tpTimeCritical;
- ну-ну...


Bes   (2003-09-11 12:39:00) [26]

Вот код:

...
type
TTh=class(TThread)
private
path:string;
id:integer;
protected
procedure DoWork;
procedure Execute; override;
public
constructor Create(s:string;i:integer);
end;
...
var
t: array [0..50] of TTh;
...
...
constructor TTh.Create(s:string;i:integer);
begin
path:=s;
id:=i;
inherited Create(false);
end;
...
procedure TTh.Execute;
begin
Priority:=tpTimeCritical;
Synchronize(DoWork);
end;
...
...
procedure TTh.DoWork;
var
stat,dt,st:string;
begin
try
aq[id]:=TadoQuery.Create(form2);
aq[id].CursorLocation:=clUseServer;
...
..
.
aq[id].Close;
aq[id].Free;
dec(thread_count);
end;
...
...
procedure TForm1.Button1Click(Sender:TObject);
var
i:integer;
begin
for i:=0 to listbox1.items.count-1 do
t[i]:=TTh.Create(listbox1.items.strings[i],i);
end;
...

не знаю где трабла...


y-soft   (2003-09-11 09:55:00) [27]

>MBo © (11.09.03 09:49) [5]
Есть большие подозрения, что автор не подумал о таких вещах...

Так что, действительно, без кода ничего не посоветовать...


MBo   (2003-09-11 09:49:00) [28]

>y-soft © (11.09.03 09:34) [4]
>А не многовато 25 одновременно работающих потоков на 1 процесс?
Ведь если они нормально применяются - большинство потоков ждут событий, не крутясь вхолостую, то это не особо напрягает.

Как бы то ни было, без подробностей ничего сказать нельзя.


y-soft   (2003-09-11 09:34:00) [29]

А не многовато 25 одновременно работающих потоков на 1 процесс?
Первичный поток при такой перегрузке может получать управление очччень редко :)


Verg   (2003-09-11 09:34:00) [30]


> как сделать так чтоб программа реагировала и не подвисала...


Грамотно проектировать потоки.


Digitman   (2003-09-11 09:13:00) [31]


> я создал еще один отдельный поток и засунул туда Application.ProcessMessage


глупее не придумаешь)

какое ты имеешь право вызывать метод VCL-объекта TApplication без синхронизации с осн.код.потоком ?


> и это тоже не помогло


при таком подходе к исследованию проблемы рискну спросить : а Вы их дустом не пробовали ?)

p.s.

Ну а если серьезно, то приводи весь код, относящийся к классу проблеммного потока.
без кода - пустой треп


BorH   (2003-09-11 03:09:00) [32]

Пробовал уменьшить количество потоков? Если тот же эффект, значит, что-то в коде не то...
А вообще скинь сюда, как ты строил их (ну, исходники). Посмотрим все вместе.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо