Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
ВнизПоток Найти похожие ветки
← →
karburator (2003-11-03 13:02) [0]Почему при копировании большого файла функцией CopyFileTo, находящейся в главном потоке, до окончания копирования не хочет работать вторичный поток
Код :
---------
FileProbiv.Suspended:= false; // FileProbiv - вторичный поток
CopyFileTo("C:\test\del.DRW" ,"C:\test\del.Del"); // del.DRW = 160 mb
// Теперь поток FileProbiv начинает работать
---------
← →
Digitman (2003-11-03 13:09) [1]
> функцией CopyFileTo, находящейся в главном потоке
ф-ция может быть вызвана в некоем потоке и в нем же
исполняться
но ф-ция не может "находиться" в каком-то там потоке, будь то главный или иной
← →
Narayan (2003-11-03 13:27) [2]> не хочет работать вторичный поток
оперативной памяти надо добавить
← →
karburator (2003-11-03 13:32) [3]Ну хорошо - вызвана :)
← →
clickmaker (2003-11-03 13:49) [4]А что делает FileProbiv ?
← →
Геннадий (2003-11-03 16:06) [5]Потоки на то и потоки, что выполняются параллельно. Ты что-то путаешь.
← →
Karburator (2003-11-03 20:08) [6]> оперативной памяти надо добавить
- у меня 256мб - помоему должно хватать
--------------
> А что делает FileProbiv ?
А в потоке FileProbiv, выводится сообщение о копировании файла в главном потоке до конца его копирования.
Только вот запускаю вторичный поток я перед копированием, а начинает он работать после того, как файл полностью откопируется. Абсурд
---------------
> Потоки на то и потоки, что выполняются параллельно.
- И я так думаю - паралельно ( \\ или // или || или даже = ) :))
← →
Narayan (2003-11-03 22:26) [7]у меня 256мб - помоему должно хватать
=))
Может наоборот попробушешь?
Сообщения выводить в основном, а копировать в другом.
Не думал о таком варианте?
← →
karburator (2003-11-04 05:15) [8]Почему при копировании большого файла функцией CopyFileTo, находящейся в главном потоке, до окончания копирования не хочет работать вторичный поток
Код потока (для наглядности упростил, но глюк тот же самый):
----------
procedure TFileProbiv.Execute;
begin
while true do
begin
showmessage("Начинаю работать!");
Suspended:= true;
end;
end;
------------
Код в главном потоке:
---------
FileProbiv.Suspended:= false; // FileProbiv - вторичный поток
CopyFileTo("C:\test\del.DRW" ,"C:\test\del.Del"); // del.DRW = 160 mb
// Теперь поток FileProbiv начинает работать
---------
FileProbiv - объявлен в основном потоке как глобальная переменная
← →
karburator (2003-11-04 05:17) [9]-> Сообщения выводить в основном, а копировать в другом.
Не думал о таком варианте?
<Блин, не думал. Сейчас попробую
Как грится - У каждой медали две стороны и ТАРЕЦ
← →
Думкин (2003-11-04 05:23) [10]Почитать о потоках и VCL.
Недавно тут пробегало.
И конечно - сам подход - кривой. Через обратно.
← →
karburator (2003-11-04 08:19) [11]Настоящие герои всегда идут в обход. При контроле копирования в главном потоке, а копировании ф-ла во вторичном все прошло как планировалось. Ну тогда так и оставлю. Но чистА из принципа всё равно хотелось бы узнать почему... (см. выше)
← →
karburator (2003-11-04 08:24) [12]Думкин
>Почитать о потоках и VCL.
>Недавно тут пробегало.
>И конечно - сам подход - кривой. Через обратно
=============
Где кривой подход - у меня в программе или в потоках и VCL?
Если у меня, то как будет не криво?
← →
Bel (2003-11-04 09:03) [13]> karburator (04.11.03 08:24) [12]
> Где кривой подход?
Раз уж ты не хочешь читать книжки, вкратце скажу основную идею, о которой пишут в каждой книжке: Обычно в доп. поток выносят длительные операции, связанные только с обработкой данных, а не с их визуализацией. Визуализацией занимается основной поток.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.033 c