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
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?
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.
Habe die schleife total beseitigt, auch kein sleep. jetzt sind es nur mehr 2% auslastung
> Das mag unter einem kooperativen Multitasking a la Win98
Selbst Windows 95 verwendete bereits preemptive multitasking, btw.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.