Ursache ist offensichtlich, dass
Code: Alles auswählen
While WindowEvent():Wend
Wahrscheinlich muss ich Threads verwenden, oder?
hth
Code: Alles auswählen
While WindowEvent():Wend
Code: Alles auswählen
EnableExplicit
Structure CopyFileFiles
source.s
dest.s
EndStructure
Structure CopyFileStruc
hThread.i
hSemaphore.i
hMutex.i
status.i
List files.CopyFileFiles()
EndStructure
Procedure CopyFileThread(*cp.CopyFileStruc)
Protected source.s, dest.s
With *cp
Repeat
WaitSemaphore(\hSemaphore)
LockMutex(\hMutex)
If FirstElement(\files())
source = \files()\source
dest = \files()\dest
DeleteElement(\files())
EndIf
\status = ListSize(\files()) + 1
UnlockMutex(\hMutex)
CopyFile(source, dest)
LockMutex(\hMutex)
\status = ListSize(\files())
UnlockMutex(\hMutex)
ForEver
EndWith
EndProcedure
Procedure.i CopyFile_(SourceFileName.s, DestinationFileName.s)
Static cp.CopyFileStruc
With cp
If Not \hMutex
\hMutex = CreateMutex()
If Not \hMutex : ProcedureReturn #False : EndIf
EndIf
If Not \hSemaphore
\hSemaphore = CreateSemaphore()
If Not \hSemaphore
FreeMutex(\hMutex)
ProcedureReturn #False
EndIf
EndIf
If Not \hThread
\hThread = CreateThread(@CopyFileThread(), @cp)
If Not \hThread
FreeSemaphore(\hSemaphore)
FreeMutex(\hMutex)
ProcedureReturn #False
EndIf
EndIf
LockMutex(\hMutex)
If AddElement(\files())
\files()\source = SourceFileName
\files()\dest = DestinationFileName
EndIf
\status = ListSize(\files())
UnlockMutex(\hMutex)
SignalSemaphore(\hSemaphore)
EndWith
ProcedureReturn @cp
EndProcedure
Macro CopyFile(SourceFileName, DestinationFileName)
CopyFile_(SourceFileName, DestinationFileName)
EndMacro
Define *CopyFileStatus.CopyFileStruc
;Eigentlich muss der Rückgabewert von CopyFile() nur einmal ausgelesen werden. Er ändert sich nicht mehr.
;Man könnte also beim ersten oder zweiten mal den Rückgabewert ignorieren, bloß nicht bei beiden. ;)
*CopyFileStatus = CopyFile("/home/nicolas/Videos/test1.avi", "/home/nicolas/tmp/t1.avi")
*CopyFileStatus = CopyFile("/home/nicolas/Videos/test2.avi", "/home/nicolas/tmp/t2.avi")
While *CopyFileStatus\status
Debug "Noch " + *CopyFileStatus\status + " Datei(en)."
Delay(1000)
Wend
Debug "Fertig."