www.mikrocontroller.net

Forum: PC-Programmierung 90 Prozent Prozessor auslastung mit VB6


Autor: CARP (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen. Habe mir ein kleines Progrämmchen geschrieben, das
einmal auf einem Epia Board im Auto laufen soll. Nun habe ich ein
Problem: 90 Prozent auslastung auf einem P4 mit 3 Ghz. Habe den Code
angefügt. Könnt ihr vielleicht etwas finden????

Dim tinseconden As Integer
Private Sub Command1_Click() ' Play / Pause
If File1.FileName = "" Then
Else
If Command1.Caption = "Play" Then
Command1.Caption = "Pause"
playf
Else
Command1.Caption = "Play"
MediaPlayer1.Pause
End If
End If
End Sub
Private Sub Command2_Click() '1 Lied vor
If File1.ListIndex = File1.ListCount - 1 Then
File1.ListIndex = "0"
Else
File1.ListIndex = File1.ListIndex + "1"
End If
MediaPlayer1.FileName = File1.Path + "\" + File1.FileName
playf
End Sub
Private Sub Command3_Click() ' Ein Lied zurück

If File1.ListIndex - 1 <= 0 Then
File1.ListIndex = "0"
Else
File1.ListIndex = File1.ListIndex - "1"
End If
MediaPlayer1.FileName = File1.Path + "\" + File1.FileName
playf
End Sub
Private Sub Command4_Click() ' Quelle wählen

If List1.ListIndex = List1.ListCount - 1 Then
List1.ListIndex = "0"
Else
List1.ListIndex = List1.ListIndex + "1"
End If
update
End Sub
Private Sub Command5_Click() ' 20 Lieder vor

If File1.ListIndex + 20 >= File1.ListCount - 1 Then
File1.ListIndex = File1.ListCount - 1
Else
File1.ListIndex = File1.ListIndex + "20"
End If
MediaPlayer1.FileName = File1.Path + "\" + File1.FileName
playf
End Sub
Private Sub Command6_Click() ' 20 Lieder zurück

If File1.ListIndex - 20 <= 0 Then
File1.ListIndex = "0"
Else
File1.ListIndex = File1.ListIndex - "20"
End If
MediaPlayer1.FileName = File1.Path + "\" + File1.FileName
playf
End Sub

Private Sub Command7_Click() 'Forwärtz spielen
If MediaPlayer1.CurrentPosition <= MediaPlayer1.Duration Then
MediaPlayer1.CurrentPosition = MediaPlayer1.CurrentPosition + 20
Else
End If
End Sub

Private Sub Command8_Click() ' Rückwärts spielen
If MediaPlayer1.CurrentPosition >= 20 Then
MediaPlayer1.CurrentPosition = MediaPlayer1.CurrentPosition - 20
Else
MediaPlayer1.CurrentPosition = 0
End If
End Sub

Private Sub Command9_Click()
SystemDown
End Sub

Private Sub Dir1_Change()
File1.Path = Dir1.Path
End Sub
Private Sub Form_Load()
ReadIni
File1.FontSize = 12
List1.AddItem "Techno"
List1.AddItem "Hip Hop"
List1.AddItem "Diverses"
 List1.ListIndex = 0
  update
 File1.ListIndex = 0
End Sub



Private Sub Form_Unload(Cancel As Integer)
'SaveIni
MediaPlayer1.Stop
End
End Sub



Private Sub Timer1_Timer()
If MediaPlayer1.CurrentPosition + 0.03 >= MediaPlayer1.Duration Then
       If File1.ListIndex = File1.ListCount - 1 Then
           If List1.ListIndex = List1.ListCount - 1 Then
           List1.ListIndex = "0"
           Else
           List1.ListIndex = List1.ListIndex + "1"
           End If
        update
        Else
        File1.ListIndex = File1.ListIndex + "1"
        End If
MediaPlayer1.FileName = File1.Path + "\" + File1.FileName
MediaPlayer1.Play
Else
End If
End Sub
Function update()
If List1.ListIndex = 0 Then Dir1.Path = "D:\techno"
If List1.ListIndex = 1 Then Dir1.Path = "D:\HIPHOP"
If List1.ListIndex = 2 Then Dir1.Path = "D:\DIVERSES"
File1.ListIndex = 0
playf
End Function
Function playf()
'If Check9.Value = 1 Then MediaPlayer1.FileName = Label4.Caption
'If Check9.Value = 1 Then MediaPlayer1.CurrentPosition =
Label3.Caption
'If Check9.Value = 1 Then File1.ListIndex = CInt(Label5.Caption)
MediaPlayer1.FileName = File1.Path + "\" + File1.FileName
If File1.FileName = "" Then
Else
MediaPlayer1.Play
End If
End Function
Private Sub Timer2_Timer()

tinseconden = MediaPlayer1.CurrentPosition
Dim sec9 As Integer
Dim TotalMin As Integer
Dim TotalSec As Integer
Dim PauseTime, Start, Finish, TotalTime
TotalMin = MediaPlayer1.Duration \ 60
TotalSec = MediaPlayer1.Duration - (TotalMin * 60)
Min = tinseconden \ 60
sec9 = tinseconden - (Min * 60)
If sec9 = "-1" Then sec9 = "0"
If sec9 < 10 Then sec9 = "0" & sec9
Text1.Text = " " & Min & ":" & IIf(sec9 < 10, "0", "") & sec9
PauseTime = 0.4
  Start = Timer
Do While Timer < Start + PauseTime
    DoEvents
   Loop
   Finish = Timer ' Bis hier her für vergangene Spielzeit

tinseconden = MediaPlayer1.Duration
TotalMin = MediaPlayer1.Duration \ 60
TotalSec = MediaPlayer1.Duration - (TotalMin * 60)
Min = tinseconden \ 60
sec9 = tinseconden - (Min * 60)
If sec9 = "-1" Then sec9 = "0"
If sec9 < 10 Then sec9 = "0" & sec9
Text2.Text = " " & Min & ":" & IIf(sec9 < 10, "0", "") & sec9
PauseTime = 0.4
  Start = Timer
Do While Timer < Start + PauseTime
    DoEvents
   Loop
   Finish = Timer

Label2.Caption = Text1.Text & "  / " & Text2.Text & " / " &
File1.ListIndex + 1

End Sub



Im Dankeschön voraus

Autor: Christoph __ (chris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beschreib doch bitte kurz, was das Programm macht (also was es nach
außen hin macht und wie das intern umgesetzt ist). Auf den Code kommt
es bei solchen Problemen nämlich meistens gar nicht an.

Wenn du z.B. eine längere Berechnung durchführst oder dein Programm in
irgendeiner Schleife hängt, ist es nur natürlich, dass die
CPU-Auslastung hoch ist. Warum sollte Windows dein Programm auch
ausbremsen, wenn es die Leistung benötigt?

Autor: Olaf Stieleke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Grund für die 90% CPU-Last ist dies hier:

Do While Timer < Start + PauseTime
    DoEvents
   Loop

Das mag unter einem kooperativen Multitasking a la Win98 oder so ganz
ordentlich sein, bei preemptivem Multitasking unter NT,2K,XP ist das
aber ziemlich übel. Ich schlage vor, anstelle mit "DoEvents" mal ein
"Sleep(0)" zu versuchen. Dürfte das gleiche Ergebnis bringen, die CPU
aber drastisch entlasten.

Autor: CARP (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe die schleife total beseitigt, auch kein sleep. jetzt sind es nur
mehr 2% auslastung

Autor: Christoph __ (chris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Das mag unter einem kooperativen Multitasking a la Win98

Selbst Windows 95 verwendete bereits preemptive multitasking, btw.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.