Форум: "Начинающим";
Текущий архив: 2006.11.26;
Скачать: [xml.tar.bz2];
ВнизОшибка в выполнении параллельного потока Найти похожие ветки
← →
ANB © (2006-11-08 13:30) [80]
> ГореПрограммер (08.11.06 13:21) [79]
1. ИМХО ты доп.поток умудряешься 2 раза запустистить. покажи код запуска потока.
2. Пока доп поток работает - чего главный делать то должен ? Если он без данных, загруженных доп.потоком работать не может - то лучше глянуть в сторону асинхронки, понадежнее будет.
← →
Сергей М. © (2006-11-08 13:31) [81]
> один единственный параллельный, который как раз подгружает
> эти данные
Раз ты убрал все это хозяйство в Synchronize(), то отныне та самая твоя "подгрузка" осуществляется в основном потоке !
В чем тогда смысл использования параллельного потока ? Ни в чем. Его можно смело выбросить в мусор.
← →
Сергей М. © (2006-11-08 13:33) [82]И (см. [80]) подозреваю, что у тебя фигурирует такой код :
MyThread := TLoadfon.Create(...);
MyThread.Execute;
?
← →
ANB © (2006-11-08 13:34) [83]
> В чем тогда смысл использования параллельного потока ? Ни
> в чем.
Это типа - помудохаться. Ибо круто и модно.
← →
ГореПрограммер (2006-11-08 13:46) [84]
> Раз ты убрал все это хозяйство в Synchronize(), то отныне
> та самая твоя "подгрузка" осуществляется в основном потоке
> !
>
> В чем тогда смысл использования параллельного потока ? Ни
> в чем. Его можно смело выбросить в мусор.
Я же писал в первом посте темы что именно мне нужно...
Мне необходимо именно фоном, не мешая работе программы выполнить код, который я предоставлял.
> MyThread := TLoadfon.Create(...);
> MyThread.Execute;
Неоднократно уже писал код запуска ) нет там такого.
← →
Anatoly Podgoretsky © (2006-11-08 14:10) [85]> ГореПрограммер (08.11.2006 13:21:19) [79]
По твоим словам, который запускается много раз вместо одного.
← →
Anatoly Podgoretsky © (2006-11-08 14:11) [86]> Сергей М. (08.11.2006 13:33:22) [82]
Все гадания.
← →
Anatoly Podgoretsky © (2006-11-08 14:13) [87]> ANB (08.11.2006 13:34:23) [83]
А зря, я в последнем проекте долго думал, прежде чем использовать потоки, хотя там мог обойтись и без них и с более высокой надежностью. Пришлось также ограничить возможность запуска одноименного потока, для это организовал пул потоков. Каждый запускается только один раз, при повторном запуске не сможет.
← →
Anatoly Podgoretsky © (2006-11-08 14:13) [88]> ГореПрограммер (08.11.2006 13:46:24) [84]
Уже 84 сообщения и ты сто процентов менял код, поэтому говорить о каком то неизвестном коде нет смысла.
← →
ANB © (2006-11-08 14:16) [89]Для начинающих медленно и 2 раза :
Creates an instance of a thread object.
constructor Create(CreateSuspended: Boolean);
Description
Call Create to create a thread in an application. If CreateSuspended is False, Execute is called immediately. If CreateSuspended is True, Execute won’t be called until after Resume is called.
← →
ANB © (2006-11-08 14:18) [90]Соответственно код :
tloadfon.create(false);
заставит поток запустится 1 раз
а
tloadfon.Resume - второй.
← →
ГореПрограммер (2006-11-08 14:19) [91]
Tloadfon = class(TThread)
private
index:integer;
protected
procedure sinform;
procedure Execute; override;
end;
....
procedure tloadfon.sinform;
begin
loadip(ar_excel.zaps[index].mac,index);
ar_excel.zaps[index].firstup:=getminup(ar_excel.zaps[index].id);
fstart.prog1.StepIt;
end;
procedure tloadfon.Execute;
var i:integer;
begin
FreeOnTerminate := True;
for i := 0 to ar_excel.count - 1 do
begin
if Terminated then
exit;
index:=i;
Synchronize(sinform);
end;
fstart.prog1.Position:=0;
fstart.stat.Panels[0].Text:="Все данные загружены";
end;
.....
вызов:
stat.Panels[0].Width:=10;
stat.Panels[0].Text:="Идет подгрузка вспомогательных данных";
prog1.Position:=0;
prog1.Max:=ar_excel.count;
tloadfon.Create(false);
if ar_excel.count>0 then
begin
tabterm.RowCount:=k22+1;
tabterm22.RowCount:=k3-k22+1;
......
← →
ANB © (2006-11-08 14:26) [92]
> ГореПрограммер (08.11.06 14:19) [91]
а теперь еще неплохо было бы код procedure sinform запостить. Кистате,
procedure tloadfon.Execute;
var i:integer;
begin
FreeOnTerminate := True; // Тута, имхо, смысла не имеет. Хотя мастера поправят, если не так.
И
← →
ГореПрограммер (2006-11-08 14:27) [93]
> а теперь еще неплохо было бы код procedure sinform запостить.
> Кистате,
он там написан.
← →
Сергей М. © (2006-11-08 14:29) [94]
> ANB © (08.11.06 14:18) [90]
>
> Соответственно код :
> tloadfon.create(false);
> заставит поток запустится 1 раз
> а
> tloadfon.Resume - второй.
>
Ну ерунду же несешь)
> ГореПрограммер (08.11.06 14:19) [91]
Ну и какого ляда ты опять обращаешься к виз.объектам без синхронизации ?
← →
ANB © (2006-11-08 14:34) [95]
> ГореПрограммер (08.11.06 14:27) [93]
А. точно. слилось - не заметил.
fstart.prog1.Position:=0;
fstart.stat.Panels[0].Text:="Все данные загружены";
вот это тоже желательно синхронизить.
И где то ты его сам еще раз стартуешь - чудес не бывает. Смотри весь код.
Для очистки совести скинь лог в файл. И время выстави. Тока сообщения поставь в начале execute, в конце и в теле цикла.
← →
Anatoly Podgoretsky © (2006-11-08 14:57) [96]> ГореПрограммер (08.11.2006 14:19:31) [91]
Весь код крутится в контексте главного потока, отсюда выводы
1. читал Архангельского
2. потоки не нужны.
← →
Anatoly Podgoretsky © (2006-11-08 14:58) [97]> ANB (08.11.2006 14:26:32) [92]
Не только, вот это ar_excel.zaps похоже на свойство, а оно может быть контролируемым.
← →
Anatoly Podgoretsky © (2006-11-08 14:59) [98]> ГореПрограммер (08.11.2006 14:27:33) [93]
Зато есть loadip
← →
Anatoly Podgoretsky © (2006-11-08 15:01) [99]> ANB (08.11.2006 14:18:30) [90]
> tloadfon.Resume - второй.
в приведеном обрывке кода не наблюдается
← →
ГореПрограммер (2006-11-08 15:09) [100]
> вот это тоже желательно синхронизить.
>
> И где то ты его сам еще раз стартуешь - чудес не бывает.
> Смотри весь код.
убрал, добавил в синхронизацию
> И где то ты его сам еще раз стартуешь - чудес не бывает.
> Смотри весь код.
если из синхронизации убрать функции выборки из базы, все выполняется корректно и один раз.
> Anatoly Podgoretsky © (08.11.06 14:57) [96]
>
> > ГореПрограммер (08.11.2006 14:19:31) [91]
>
> Весь код крутится в контексте главного потока, отсюда выводы
>
> 1. читал Архангельского
> 2. потоки не нужны.
>
Тогда очередной глупый вопрос:
каким образом реализовать фоновую загрузку данных из базы ?
> Anatoly Podgoretsky © (08.11.06 14:59) [98]
>
> > ГореПрограммер (08.11.2006 14:27:33) [93]
>
> Зато есть loadip
Так он и был раньше
← →
Сергей М. © (2006-11-08 15:13) [101]
> ГореПрограммер (08.11.06 15:09) [100]
>
>
Ты вообще понимаешь, что такое в дан.контексте "синхронизация" и что при оной происходит ?
Объясни своими словами, если понимаешь ...
← →
ANB © (2006-11-08 15:15) [102]
> Тогда очередной глупый вопрос:
> каким образом реализовать фоновую загрузку данных из базы
> ?
А зачем ее делать в отдельном потоке, если достаточно маленькими кусочками и Application.ProcessMessages ?
← →
Сергей М. © (2006-11-08 15:22) [103]
> ANB © (08.11.06 15:15) [102]
Опять же ерунду городишь.
Не всякая СУБД реализует асинхронные режимы, поэтому использование доп.потоков в ряде случаев вполне оправдано
← →
ГореПрограммер (2006-11-08 15:22) [104]
> Ты вообще понимаешь, что такое в дан.контексте "синхронизация"
> и что при оной происходит ?
>
> Объясни своими словами, если понимаешь ...
На сколько я понимаю это синхронизация методов текущего потока с главным VCL потоком.
← →
Сергей М. © (2006-11-08 15:25) [105]
> ГореПрограммер (08.11.06 15:22) [104]
> На сколько я понимаю это синхронизация методов текущего
> потока с главным VCL потоком
Не подлежит сомнению.
А что собственно происходит при этом ? Вот в чем вопрос к тебе ...
← →
ANB © (2006-11-08 16:12) [106]
> Сергей М. © (08.11.06 15:22) [103]
А асинхронка нужна далеко не всегда, если запрос оптимизен, то больше времени уходит на перекачку ответов. Вот этот перебор и разбить на кусочки.
← →
ANB © (2006-11-08 16:14) [107]А авторские запросы вообще есть смысл запихать в один, да заодно и параметризировать. И асинхронка/потоки не нужны будут.
← →
Сергей М. © (2006-11-08 16:19) [108]
> ANB © (08.11.06 16:12) [106]
> асинхронка нужна далеко не всегда
"нужна", "не нужна" .. "оптимизен", "не оптимизен"
НЕТ ничего этого, предположим) ... СУБД не позволяет)
Что дальше ?
Дальше - копание могилы в виде доп.потоков)
← →
ANB © (2006-11-08 17:37) [109]
> СУБД не позволяет)
СУБД не позволяет грамотно проектировать БД и оптимизить запросы, чтобы они не грузились по полчаса ?
Страницы: 1 2 3 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.11.26;
Скачать: [xml.tar.bz2];
Память: 0.65 MB
Время: 0.086 c