Как запустить приложение на определенное время
От: Vezen  
Дата: 03.12.05 10:37
Оценка:
У меня такая проблема. Я использую механизм OLE и в коде делаю вызов CreateObject, когда я получу объект я вызываю его метод Open для различных файлов. Моя программа должна обработать все файлы определенного типа. Проблема заключается в том, что на некоторых файлах процесс созданный с помощью CreateObject "зависает", при этом остальные файлы не могут быть обработаны. Я бы хотел, чтобы если по истечении определенного времени файл обработать не удалось, прервать его обработку и начать проверять остальные файлы.
Я придумал метод с помощью которого можно запустить обработку файлы на определенное время, пока этот метод я не реализовал. Поэтому хочу у Вас спросить стоит ли его реализовывать и какие при этом могут быть проблемы.
Метод, который я придумал, заключается в следующем:
1. Просмотреть список процессов и определить запущены ли уже приложения, которое я собираюсь запустить;
2. Вызвать CreateObject;
3. Просмотреть список процессов и определить какие приложения, из тех, что я запускал, запущены;
4. Основываясь на информации из п.1 и п.3 определить id того процесса, который создал п.2;
5. В цикле обрабатывать файлы;
6. Определить текущее время помощью GetTickCount;
7. Создать поток. Этому потоку передать параметры id запущенного процесса и время, и максимальное время работы приложения;
8. Вызвать метод Open для конкретного документа.
9. Если документ успешно обработан, то прервать работу потока.
10. Если при обработке произошла ошибка и процесс с id, который мы определили в п.4. отсутствует, то повторить п.1-п.4.
Поток производит следующую работу:
1. В цикле проверяет не превысилали разность GetTickCount и времени начала обработки максимальное время работы приложения;
2. Если не превысило, то заснуть примерно на 1000 или 100 мс;
3. Если превысило, то завершить процесс с номером, который мы определили в п.4.

Если будете предлагать другие методы необходимо учесть, что приложение должно работать на Windows 95/98/Me/NT 4.0/2000/XP.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.