- Monitörler sonunda bir alt klasöründe oluşturulur belirli dosya adıyla yeni bir dosya yaratılması için bir klasör.
- Dosya oluşturulduğunda, alt klasörler yolu bir TList biçimindeki sıraya eklenir.
- Dosyalar, oluşturma sırasına göre işlenmelidir.
- Dosyaları bir ağ konumuna taşımayı içeren alt klasördeki tüm dosyaları (bu durumda bulunan resimler) işlemek için bir yordam çağrılır.
- Alt klasör yolu sıradan kaldırılır (TList).
- Kuyrukta başka yollar varsa, sonraki yol işleme işlemine iletilir.
I am having problem süresi
Delphi beklemek almanın bir yolu var mı ... bir ağ konumuna dosyalarını kopyalamak için öylesine Resimlerin sayısına ve büyüklüğüne bağlı olarak değişir olmasıdır Dosya işlemi prosedürü bitirmek için?Bir boolean değerinin değişmesini beklemiş bir süre döngüsünü denedim (kopyalanacak son dosya ağda bulunduğunda değiştirildi) ancak bu uygulama (uygulama.processMessage ile bile olsa) ve dirMonitor bileşeni başarısız oldu. Bir sonraki alt klasörü TList'e ekleyin.
Herhangi bir öneri en çok takdir edilecektir.
Şimdiden teşekkürler. Replys için
Teşekkür ...
Ben sadece Delphi 7 imkânsız yüzden onun bir erişime sahip olmalarına rağmen ... ideal görünüyor OmniThread bir göz vardı.
Sorun şu ki, klasörler, farklı boyutlar ve ağ trafiği vb. Nedeniyle aktarım yapmak için değişken süreler alıyorlar. Çok fazla görüntüye sahip bir klasörün yalnızca birkaç görüntü içeren bir klasör tarafından izlenmesi durumunda; İkisinden küçük olanı ilk önce ağ hedefine ulaşıyor. Ağın bir üçüncü taraf yazdırma biriktiricisi olması, baskıların yanlış sırada kalmasını sağlar.
basitleştirilmiş kodu:
procedure TForm1.programTimerTimer(Sender: TObject);
begin
if (fileOperationInProgress = false) AND (programPaused = false) then
begin
processOrderQueue;
end;
end;
procedure TForm1.processOrderQueue;
begin
// gets folder paths from queue
// processes images
// copy to print spooler (network location)
copyFolder(fromPath, toPath);
// remove temp files
end;
procedure TForm1.copyFolder(copyFrom : String; copyTo : String);
var
fos : TSHFileOpStruct;
begin
fileOperationInProgress := True;
ZeroMemory(@fos, SizeOf(fos));
with fos do
begin
wFunc := FO_COPY;
fFlags := FOF_FILESONLY or FOF_SILENT;
pFrom := PChar(copyFrom);
pTo := PChar(copyTo)
end;
ShFileOperation(fos);
fileOperationInProgress := False;
end;
Ben cevap ile geldim düşünün ... Ben tek bir dizideki tüm dosya operationions yapmak ve küresel bir 'meşgul' ayarlayacağım başladığında boolean ve tamamlandığında yeniden değiştirin. Bu şekilde, herhangi bir dosya işlemi devam ederken kabuk monitörü mesajları kaçırmaz.
Dosyaları kopyalamak için hangi işlevi kullanıyorsunuz? [SHFileOperation] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb762164%28v=vs.85%29.aspx)? – RRUZ
Dosyaları nasıl kopyalıyorsunuz? Lütfen kodu göster. –
Gabr'ın örneğini [kopyalama dosyasında] (http://stackoverflow.com/questions/1766626/copy-file-in-a-thread) bölümünde takip edebilirsiniz. Kopyalama bittiğinde ana konu bildirilir. –