vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

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

Visual-Basic Einsteiger
Probleme mit Threads 
Autor: Flaute-1A
Datum: 11.10.04 21:46

Hi

Ich habe mir ein Programm geschrieben, das den Windows Taskmanager, sowie die Taskleiste und das Startmenü ersetzen soll!

Ein Screenshot ist hier zu sehen http://home.pages.at/troller507/Pics/bild1.JPG

Jetzt jedoch zu meinem Problem. Das Auslesen der Laufwerksdaten läuft bei meinem Programm in Threads. Hier zu der Code ohne Deklarationen:

Private Sub pThread_OnThreadFinish(ByVal ThreadHandle As Long, ByVal ThreadID _
  As Long)
 
    Dim i As Integer
 
    Wait 500
 
    WaitUntilThreadisFinish = 0
 
    lblSearch.Caption = ""
 
    For i = 0 To frmmain.drDrive.ListCount - 2
        If i >= 4 Then
            Exit For
        End If
    Next i
 
    If i = 3 Then
        frmmain.picGraphDrive.Width = 1485
        frmmain.picGraphDrive.Left = 810
        frmmain.lblSysAnly(0).Left = 69
        frmmain.lblSysAnly(1).Left = 69
        frmmain.lblSysCapt.Left = 76
    ElseIf i = 4 Then
        frmmain.picGraphDrive.Width = 1305
        frmmain.picGraphDrive.Left = 990
         frmmain.lblSysAnly(0).Left = 55
        frmmain.lblSysAnly(1).Left = 55
        frmmain.lblSysCapt.Left = 62
    ElseIf i = 5 Then
        frmmain.picGraphDrive.Width = 1125
        frmmain.picGraphDrive.Left = 1170
        frmmain.lblSysAnly(0).Left = 41
        frmmain.lblSysAnly(1).Left = 41
        frmmain.lblSysCapt.Left = 42
    End If
 
    frmmain.picGraphDrive.Line (0, 0)-(i * 10, 100), &HFF0000, BF
 
    For i = 0 To UBound(FreeBArray) - 1
        If i >= 4 Then
            Exit For
        End If
        frmmain.lblDrive1(i) = frmmain.drDrive.List(i)
 
        If FreeBArray(i) <> 0 And FreeBArray(i) <> "" Then
            If (100 / TotBArray(i)) * FreeBArray(i) <> 0 Then _
              frmmain.picGraphDrive.Line (i * 10, 0)-((i * 10) + 10, (100 / _
              TotBArray(i)) * FreeBArray(i)), &HFFFF00, BF
        Else
            frmmain.picGraphDrive.Line (i * 10, 0)-((i * 10) + 10, 100), _
              &HFFFF00, BF
        End If
 
        frmmain.picGraphDrive.Line (i * 10, 0)-(i * 10, 100), &H80000007
 
        frmmain.lblDs(i) = FSArray(i)
        frmmain.lblFs(i) = FSPArray(i)
 
    Next i
 
    tmrGetProzessName.Enabled = True
    Wait 500
    frmmain.tmrGetAvailableDriveInf.Enabled = True
 
End Sub
 
Sub DoInfo(DummyArgument As Variant)
 
    Dim i
    Dim Result As Long
    Dim Drv As String
    Dim SerN As Long, PathL As Long, flags As Long
    Dim XPC As Long, BPS As Long
    Dim FreeC As Long
    Dim TotC As Long
    Dim VolN As String * 256
    Dim FileS As String * 256
 
    ReDim FSArray(0)
    ReDim FSPArray(0)
    ReDim TotBArray(0)
    ReDim FreeBArray(0)
 
    For i = 0 To frmmain.drDrive.ListCount - 1
 
        Drv = frmmain.drDrive.List(i) & "\"
 
        Result = GetVolumeInformation(Drv, VolN, 256, SerN, _
                                    PathL, flags, FileS, 256)
 
        If Result = 0 Then
            FSArray(UBound(FSArray)) = "**"
        Else
            If Left$(FileS, InStr(FileS, Chr$(0)) - 1) = "NTFS" Then
                FSArray(UBound(FSArray)) = "ns"
            ElseIf Left$(FileS, InStr(FileS, Chr$(0)) - 1) = "FAT" Then
                FSArray(UBound(FSArray)) = "ft"
            ElseIf Left$(FileS, InStr(FileS, Chr$(0)) - 1) = "CDFS" Then
                FSArray(UBound(FSArray)) = "cf"
            End If
        End If
 
        Wait 250
 
        Result = GetDiskFreeSpace(Drv, XPC, BPS, FreeC, TotC)
 
        If Result = 0 Then
            FSPArray(UBound(FSPArray)) = "**"
        Else
            FreeBArray(UBound(FreeBArray)) = CDbl(FreeC) * XPC * BPS 'freeb
            FSPArray(UBound(FSPArray)) = Format$(FreeBArray(UBound(FreeBArray)) _
              / 1000000000, 0)
        End If
 
        TotBArray(UBound(TotBArray)) = CDbl(TotC) * XPC * BPS 'totb
 
        ReDim Preserve FSArray(UBound(FSArray) + 1)
        ReDim Preserve FSPArray(UBound(FSPArray) + 1)
        ReDim Preserve FreeBArray(UBound(FreeBArray) + 1)
        ReDim Preserve TotBArray(UBound(TotBArray) + 1)
 
    Next i
 
End Sub
Lasse ich diesen Thread mehrer Male im Programm laufen d.h. alle anderen Daten (Cpu Speed, Ram Usage, In/Out Network Traffic usw.) werden auch ermittelt, so stürzt das Programm nach etwa 30s ab! Deaktiviere ich jedoch diese Funktion so läuft der Thread einwandfrei! Umgekehrt genau gleich (d.h. alle Daten werden problemlos ermittelt, der Thread läuft nicht).

Fehlerbeschreib beim Absturz: AppName: Vb6.exe .... Offset: 00000174e ...

Ich habe diverse Sachen ausprobiert um das Problem einzugrenzen, jedoch ohne Erfolg! Wie lässt sich die genau Ursache herausfinden?

Gruss Flaute
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Probleme mit Threads742Flaute-1A11.10.04 21:46

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-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