Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ole word зависает. / 15 сообщений из 15, страница 1 из 1
20.06.2019, 13:38
    #39828774
RackotPro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ole word зависает.
Доброго времени суток господа, очень нужна помощь. И так есть очень страшный legacy проект, в нем реализована печать, с помощью ole.

Всё работает в 99% случаях хорошо. Однако есть алгоритм направляющий на печать по пачке документов.

Примерно вот такой код, приведу пример дабы отсечь многие не верные советы.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
While not is empty so
begin
  word := CreateOleObject('Word.Application');

  ...
  word.ActiveDocument.Close(False);
  word.Quit(1);
end 



Всё бы было ничего, но когда слишком много итераций word может зависнуть (произвольно, при повторе, может все обработать как нужно) и на стадии quit программа просто висит и можно её только убить. Процесс word в свою очередь висит от силы минуты 2 (хотя не должен), но затем умирает, а программа продолжает ждать, пока тот воскреснет. Грешу на антивирус или другое сторонние ПО, которое могло вмешаться.

И так вопрос, как выполнить команду и не ждать word. Решение что приходят на ум это реализовать в потоке или в отдельном приложении, но кастыли не хочу строить, к тому же потоки мне можно сказать не доступны по ряду причин.

Буду рад помощи, заранее спасибо.
...
Рейтинг: 0 / 0
20.06.2019, 14:55
    #39828811
Ghost Writer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ole word зависает.
обязательно в каждой итерации новый экземпляр word создавать ? можно же в одном открывать/закрывать документы.
...
Рейтинг: 0 / 0
20.06.2019, 15:04
    #39828819
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ole word зависает.
Quit в OLE Офиса вообще очень странная штука, с Ёкселем в свое время натрахался. В самом деле лучше максимально сократить его использование
...
Рейтинг: 0 / 0
20.06.2019, 15:06
    #39828820
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ole word зависает.
RackotProРешение что приходят на ум это реализовать в потоке или в отдельном приложении,Не поможет. Все управление все равно передается в однопоточный Word
RackotProБуду рад помощи,Для начала разGhost Writerобязательно в каждой итерации новый экземпляр word создавать ? можно же в одном открывать/закрывать документы.а два - уберите скрытие окна Word и посмотрите, что он делает? Может там диалоговое окно появляется?
...
Рейтинг: 0 / 0
20.06.2019, 15:06
    #39828821
RackotPro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ole word зависает.
Ghost Writer, хм... логично, нужно попробовать), но код громоздкий модуль везде используется, очень много правок придется сделать. Но спасибо, за наводку, что-то как-то в голову не приходило)).
...
Рейтинг: 0 / 0
20.06.2019, 15:09
    #39828826
RackotPro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ole word зависает.
_Vasilisk_, очень сложно воспроизвести, не всегда удается, у пользователей как назло постоянно, у меня реже. С visible в тру не получилось повторить глюк, может стоит ещё посидеть попытаться.
...
Рейтинг: 0 / 0
20.06.2019, 15:16
    #39828828
Gerasimenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ole word зависает.
RackotPro,

Код: pascal
1.
2.
3.
4.
ActiveDocument.PrintOut;
DisplayAlerts:=False;
ActiveDocument.Close(wdDoNotSaveChanges);
Quit;
...
Рейтинг: 0 / 0
20.06.2019, 15:39
    #39828836
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ole word зависает.
Cоздавай CreateOleObject + DisplayAlerts := False один раз вне цикла
А в цикле цепляйся к нему GetOleObject
Кстати, Quit нифига не завершает этот Word ( Почему Эксель завершается только после CoUninitialize? ) и в цикле он не нужен
...
Рейтинг: 0 / 0
20.06.2019, 16:09
    #39828856
RackotPro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ole word зависает.
Gator, немогу, точнее не хочу, большой легаси проект в нем модуль отвечающий за печать, в нем создание уничтожение из вне вызывается много раз, в итоге править весь проект, а это оооочень много модулей.
...
Рейтинг: 0 / 0
20.06.2019, 16:15
    #39828861
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ole word зависает.
RackotPro,

Молодой, ленивый... Ну, живи с проблемой или отвяжись от OLE
...
Рейтинг: 0 / 0
20.06.2019, 16:19
    #39828865
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ole word зависает.
RackotProв нем модуль отвечающий за печать, в нем создание уничтожение из вне вызывается много раз,Т.е. в реальности код такой?
Код: pascal
1.
2.
while ... do
  Print(...)


Где Print это процедура из этого модуля с созданием и удалением?
...
Рейтинг: 0 / 0
20.06.2019, 16:25
    #39828870
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ole word зависает.
Плохой подход.
- Нужно один раз создать вне цикла
-- В цикле много раз обратиться к созданному
- Освободить в вне цикла ранее сожданное
...
Рейтинг: 0 / 0
20.06.2019, 16:48
    #39828883
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ole word зависает.
RackotProточнее не хочу
Страдай.
...
Рейтинг: 0 / 0
20.06.2019, 16:51
    #39828885
crossa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ole word зависает.
Необязательно каждый раз запускать Word заново. Можно попробовать что-то типа этого:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
WordIsRunning := True;
try
   oWord := GetActiveOleObject('Word.Application');
except
   WordIsRunning := False;
   oWord := CreateOleObject('Word.Application');
end;
...
if NOT WordIsRunning then oWord.Quit(1);
...
Рейтинг: 0 / 0
20.06.2019, 18:41
    #39828923
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ole word зависает.
crossa, Внимательно посмотрел? Какой-такой Quit у ноля?
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ole word зависает. / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]