Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: Реагировать на запись в файл Добавлено: 19.01.06 16:41  

Автор вопроса:  Max

Ответить

  Ответы Всего ответов: 37  

Номер ответа: 16
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #16 Добавлено: 22.01.06 13:02
какие таймеры, какие FileLen?
Специально для уведомления об изменениях есть FindFirstChangeNotification и FindNextChangeNotification и WaitForMultipleObjects

Ответить

Номер ответа: 17
Автор ответа:
 Max



Вопросов: 12
Ответов: 17
 Профиль | | #17 Добавлено: 22.01.06 17:02
HOOLIGAN
попробовал - то что надо
большое спасибо !

Ответить

Номер ответа: 18
Автор ответа:
 Max



Вопросов: 12
Ответов: 17
 Профиль | | #18 Добавлено: 23.01.06 11:13
HOOLIGAN
вот только нюанс один.
WaitForMultipleObjects подвешивает программу, а мне надо, чтобы параллельно с ожиданием можно было бы еще что-то делать.

есть какие-то еще варианты, как ждать ответа ?

Ответить

Номер ответа: 19
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #19 Добавлено: 23.01.06 12:21
Запустить в параллельном потоке :)
А вообще функции типа WaitFor и MsgWaitFor тут не слишком уместны, т.к. используются для синхронизации, а тут нужно немного другое.
Можно, конечно, хуки вешать, но, ИМХО, оно того не стоит...

Ответить

Номер ответа: 20
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #20 Добавлено: 23.01.06 12:30
WaitForMultipleObjects практически всегда используется в отдельном потоке, чтобы не тормозить основной.
Схема:
в dll пишешь 2 процедуры: первая вызывается из vb-проги и принимает параметр - имя файла. Эта же процедура запускает отдельным потоком вторую процедуру, которая делает FindFirstChangeNotification и ждет WaitForMultipleObjects. Как только WaitForMultipleObjects сработала, вторая процедура сообщает тебе в vb-прогу, что файл изменился. Все. WaitForMultipleObjects запущен в отдельном потоке, и может висеть, сколько ему надо, основная прога не будет его ждать и морозиться.

Либо можешь по vb-шному: непрерывно клацать таймером, делать циклы с DoEvents, нагружающие проц и т.д. При этом выполняя каждый раз кучу бесполезных операций.

Ответить

Номер ответа: 21
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #21 Добавлено: 23.01.06 12:33
Кстати, о неуместности WaitForMultipleObjects: именно эта ф-ция используется вместе с FindFirstChangeNotification в примере из msdn.

Ответить

Номер ответа: 22
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #22
Добавлено: 23.01.06 12:38
Люди, если кто-то сделал в соответствии с (16),(20), поделитесь этим кодом, плс.

Ответить

Номер ответа: 23
Автор ответа:
 Max



Вопросов: 12
Ответов: 17
 Профиль | | #23 Добавлено: 23.01.06 12:41
базовый пример я взял отсюда:
http://www.mentalis.org/apilist/FindFirstChangeNotification.shtml

дальше буду уже сам додумывать и пробовать
спасибо всем за советы

Ответить

Номер ответа: 24
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #24 Добавлено: 23.01.06 12:43
На VB такое лажево делать, разве что ActiveX.exe. На сях - другое дело, но не каждому отдельная длля понравится.

Ответить

Номер ответа: 25
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #25 Добавлено: 23.01.06 14:45
Dll - этот точно такой же исполняемый код, как и ехе, только расширение файла другое.
Почему-то слово ехе никого не пугает, а от слова dll vb-шники в ужасе шарахаются, как от чумы, забывая при этом, что вся винда состоит, грубо говоря, из одних dll.

Ответить

Номер ответа: 26
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #26 Добавлено: 23.01.06 15:01
Пугает не расширение файла, а само его наличие. Просто много людей не приемлет модульную архитектуру приложения и старается запихнуть весь код в один исполняемый файл. Почему-то...
Хотя сами три буквы dll могут пугать оттого что они vb-шникам недоступны :) Активиксы в счет не берем.

Ответить

Номер ответа: 27
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #27 Добавлено: 23.01.06 15:38
Почему же dll недоступны???
Неужели кто-то запретил пользоваться vc или masm или delphi?

Ответить

Номер ответа: 28
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #28 Добавлено: 23.01.06 15:53
Речь шла именно о VBшниках. Если знаешь что-то еще - разумеется, множество проблем снимается автоматически.
Только вот многие люди тут и с ВБ разобраться не могут ;)

Ответить

Номер ответа: 29
Автор ответа:
 Max



Вопросов: 12
Ответов: 17
 Профиль | | #29 Добавлено: 25.01.06 09:51
не так страшен Dll , как его малюют :)

а вообще с мультитредингом полегче будет и в новых проектах на .NET используем.

но пока еще есть проекты "старые", с которыми приходится мудохаться.

Ответить

Номер ответа: 30
Автор ответа:
 Alexandrus



ICQ: 496782368 

Вопросов: 18
Ответов: 312
 Web-сайт: starsorion.com
 Профиль | | #30
Добавлено: 26.01.06 22:36
Мах:
Вот пример для VB6.
Увы, при моих экспериментах я добился работы только с каталогами,вернее изменения содержимого каталога,но ничто не мешает при успешном возврате уведомлении проверить нужный тебе файл другими средствами VB.
Особенность уведомлений в том,что прога виснет до истечения заданного времени ожидания события или виснет совсем если задано неограниченное время ожидания и событие так и не произошло.Можно попробовать прикрутить к отдельному потоку,но зная как VB6 c ними работает...
И тем не менее вот пример ожидания уведомления.
Константы контроля:
FILE_NOTIFY_CHANGE_FILE_NAME = &H1 Создание,удаление,переименование файла
FILE_NOTIFY_CHANGE_DIR_NAME = &H2 Создание,удаление,переименование каталога
FILE_NOTIFY_CHANGE_ATTRIBUTES = &H4 Изменение атрибутов файла
FILE_NOTIFY_CHANGE_LAST_WRITE = &H10 Изменение размера файла
FILE_NOTIFY_CHANGE_SECURITY = &H100 Изменение параметров защиты файлов(только NT)
INFINITE = &HFFFF Для неограниченного ожидания
Возвращаемые значения:
Private Const WAIT_FAILED = -1& Ожидание не сработало
Private Const WAIT_OBJECT_0 = 0 Есть изменение
Private Const WAIT_TIMEOUT = &H102& Истекло время ожидания

Dim hRev As Long
Dim lngStatus As Long
Dim hTime as long
Dim hSub as long '0-без подкаталогов 1- с подкаталогами
hTime=5000 'ожидать 5000 миллисекунд
hRev = FindFirstChangeNotification("c:\test\", hSub, FILE_NOTIFY_CHANGE_SIZE)
lngStatus = WaitForSingleObject(hRev, hTime)
Select lngStatus
 case WAIT_FAILED
 case WAIT_OBJECT_0
 case WAIT_TIMEOUT
end select

С ув. Alex

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам