Как синхронизировать рабрту VB и внешних программ?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Как синхронизировать рабрту VB и внешних программ?

Сообщение Dimon111 » 02.12.2008 (Вт) 11:37

Вкратце:
Текстовый файл построчно обрабатывается в программе VB и построчно записывается в другой файл. Далее выполняется внешний BAT - файл в котором вызывается ассемблер. Вот этот ассемблер не видит созданый файл без кнопки пауза:

    Loop 'цикл обработки / создания файла
    Close 'закрытие открытых файлов
    MsgBox "Пауза"
    Shell ("D:\8051\execute\2.bat")

DoEvents в этой ситуации не помогает. Может кто знает, как синхронизировать этот процесс без паузы?

Спасибо.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Как синхронизировать рабрту VB и внешних программ?

Сообщение alibek » 02.12.2008 (Вт) 11:42

Паузу пробовал ставить?
Скорее всего дело в кешировании записи.
Lasciate ogni speranza, voi ch'entrate.

Dimon111
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 28.01.2008 (Пн) 22:11

Re: Как синхронизировать рабрту VB и внешних программ?

Сообщение Dimon111 » 02.12.2008 (Вт) 16:22

Точно кэширование. Странно, что таких проблем не возникало ни у кого. Пауза конечно может спасти, но ее продолжительность может быть определена только экспериментально и не гарантирует стабильной работы.

Идея ждать появления файла на диске - тупиковая. При ошибках ассемблирования файл может и не появится.

Собственно ручная пауза - пока единственный выход.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Как синхронизировать рабрту VB и внешних программ?

Сообщение alibek » 02.12.2008 (Вт) 16:27

Не единственный. Можно указать системе сбросить кэш записи на диск, почитай про FlushFileBuffers. Правда тогда сохранять надо через API.
Можно ожидать, пока кэш не будет сброшен, только не помню как.
Lasciate ogni speranza, voi ch'entrate.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Как синхронизировать рабрту VB и внешних программ?

Сообщение alibek » 02.12.2008 (Вт) 16:29

Еще можно попробовать перед запуском bat-файла открыть текстовый файл на чтение и закрыть. Возможно это поможет.
Lasciate ogni speranza, voi ch'entrate.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Как синхронизировать рабрту VB и внешних программ?

Сообщение Antonariy » 02.12.2008 (Вт) 16:41

Есть api-функция, уведомляющая об изменениях файловой системы в указанной папке, называется FindFirstChangeNotification… Можно дождаться ее отработки (аналогично WaitForSingleObject) с опцией FILE_NOTIFY_CHANGE_LAST_WRITE и после этого запустить bat.

MSDN писал(а):FILE_NOTIFY_CHANGE_LAST_WRITE

Any change to the last write-time of files in the watched directory or subtree causes a change notification wait operation to return. The operating system detects a change to the last write-time only when the file is written to the disk. For operating systems that use extensive caching, detection occurs only when the cache is sufficiently flushed.
Лучший способ понять что-то самому — объяснить это другому.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 16

    TopList