vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Multitasking 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.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Multitasking Problem mit Array1.501TBX05.04.11 08:03
Re: Multitasking Problem mit Array1.012Dirk05.04.11 08:30
Re: Multitasking Problem mit Array870TBX05.04.11 15:49
Re: Multitasking Problem mit Array862Dirk05.04.11 16:37
Re: Multitasking Problem mit Array901TBX05.04.11 17:21
Re: Multitasking Problem mit Array1.050Dirk06.04.11 09:49
Re: Multitasking Problem mit Array954TBX07.04.11 20:50
Re: Multitasking Problem mit Array975Blackbox07.04.11 21:45
Re: Multitasking Problem mit Array834TBX08.04.11 10:05
Re: Multitasking Problem mit Array943Blackbox21.04.11 19:26
Re: Multitasking Problem mit Array789TBX22.04.11 23:40
Re: Multitasking Problem mit Array744Blackbox23.04.11 20:20
Re: Multitasking Problem mit Array850TBX24.04.11 10:22

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 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