Urmărirea modificărilor în sistemul de fișiere și programarea firelor (firelor)
Cuvinte cheie: componente externe, Delphi, flux, fir, TThread, directoare sondaj, modificări de urmărire în fișiere, FindFirstChangeNotification, WaitForSingleObject
Urmăriți modificările din director
Atunci când se implementează un schimb între programe, este adesea necesară informarea sistemului de primire (în cazul nostru, 1C: Enterprise) că dosarele au sosit și este timpul să le primim.
Alternativ, puteți scana directorul din rutina de procesare a așteptare (de exemplu, efectuați acest lucru la fiecare N secunde).
Un alt mod, poate mai corect - de a utiliza funcțiile sistemului FindFirstChangeNotification, FindNextChangeNotification și FindCloseChangeNotification API pentru Windows (există funcții similare în sistemul de operare Unix). În acest caz, notificarea unei modificări în sistemul de fișiere efectuează nucleul sistemului de operare, și nu este necesar „gaura prodelyvat“ de pe hard disk-ul face apel constant la el.
Ce facem din codul 1C
După o astfel de inițializare, procedura de procesare a evenimentului de ieșire 1C va primi notificări privind o modificare, în acest exemplu, a dosarului "c:". Dacă setați parametrul vk. Urmăriți subdirectoarele = 1, apoi și subdosarele. Vor fi urmărite numai modificările numelor de fișiere (de exemplu, apariția unui fișier nou în director), dar nu modificarea conținutului fișierelor.
Pentru a opri modificările sondajului în directoare, este disponibilă o funcție
Procedură de debit în Delphi
Procedura generează evenimente (ExternalEvent) de îndată ce detectează modificările în dosarul specificat al sistemului de fișiere. Parametrul FILE_NOTIFY_CHANGE_FILE_NAME specifică necesitatea de a controla numele fișierelor. Consultați ajutorul WinAPI (de exemplu, pe discul MSDN) pentru a afla ce opțiuni are acest parametru.
Initializarea firului
Pentru un fir, definim o clasă separată moștenită de la TThread.
Constructorul de clasă este descris după cum urmează:
Obiectul componentei externe conține câmpul MyThread (tip - TThread).
În metoda VC, inițializez variabila fluxului după cum urmează:
În acest moment, rutina noastră de thread începe să execute:
procedura TMyThread.Execute;
Și se efectuează până când dau comanda pentru a opri fluxul:
Un fir poate prinde o situație pe care vrea să o încheie prin citirea proprietății Terminate:
Apelează MyThread.WaitFor așteaptă ca firul să termine lucrarea, după care variabila poate fi distrusă - MyThread.Destroy.
concluzie
Am considerat că am lucrat cu fluxul de execuție în componenta externă 1C: Enterprise.
Fișierul efectuează o acțiune utilă - urmărește schimbarea fișierelor din director.
Puteți face fluxul de a face altceva: de exemplu, interoga FTP, cutia poștală scanner de coduri de bare sondaj sau să efectueze alte funcții utile în modul automat.
Componenta externă cu cod sursă și configurație de testare pentru descărcare: