| |

Fortgeschrittene ProgrammierungMultitasking Problem mit Array | |  | Autor: TBX | Datum: 05.04.11 08:03 |
| Hallo,
da das folgende Problem Teil einer komplexen Anwendung ist, versuche ich es erstmal grob zu Erklären.
Mein Programm besteht aus zwei Komponenten. Das Hauptprogramm mit der GUI und der ActiveX-EXE, welche die Dateien verarbeitet.
Das Programm hat eine große Anzahlt an komplexen Konfigurationsdateien zu verarbeiten, welche zunächst geparst werden müssen. Um die Verarbeitungszeiten erheblich zu verkürzen, setzte ich auf Multitasking, welches durch die ActiveX-Exe realisiert wird.
Die GUI-Exe enthält einen Scheduler mit einer Warteliste für ausgelagerte Prozesse, von denen immer 10 gleichzeitig verarbeitet werden. Ein "Prozess" enthält u.a. jeweils den Dateinamen und einen Zeiger auf die Klasse in der ActiveX. Das funktioniert alles wunderbar. Aber jetzt kommt das Problem:
Die GUI hängt die erste Konfigurationsdatei an den Scheduler an, darin gibt es eine Funktion "CreateProcess", im folgenden grob dargestellt:
Public Function CreateProcess(File as String, ...)
(...)
Dim iId as Long
iId = FindFreeProcess()
If iId = -1 Then
iId = UBound(Processes) + 1
Redim Preserve Processes(iId)
End If
(...)
End Function In einem eigenen Prozess wird nun die Konfigurationsdatei geparst. Enthält diese Verweise auf weitere Dateien, werden die per Event an die Gui zurückgegeben und wiederrum dem Scheduler (mit "CreateProcess") zugeführt. Das ganze ist also mehrfach verschachtelt.
Und nun kommt es: Bei Redim Preserve knallt es regelmäßig: "Array unveränderlich oder gesperrt".
Das kommt wohl daher, das mehrere Prozesse gleichzeitig auf diese Funktion zugreifen. Es passiert aber auch nur wenn größere Dateien eingelesen werden.
Ich habe schon einiges Versucht, z.B. mehrfaches wiederholen in der Hoffnung daß das Array in der Zeit wieder frei wird, oder ich habe eine Warteschleife in "CreateProcess" eingebaut. Kein Erfolg.
Hat vielleicht irgend jemand eine Idee wie ich verhindern kann, das mehrere Prozesse gleichzeitig in die Funktion einspringen können, ohne das ich Dateien fallen lassen muss? Oder wie ich die Funktion so gestalten kann das es nicht mehr knallt?
Ich kann auch wenn ich heute Abend zu hause bin, mehr Details des Quellcodes posten, habe aber hier gerade keinen Zugriff darauf. |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
Neu! sevPopUp 2.0 
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere InfosTipp des Monats Access-Tools Vol.1 
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|