Entwickler-Ecke
Basistechnologien - Zu viel CPU-Power
SanPan - So 08.10.06 13:51
Titel: Zu viel CPU-Power
Hey leute,
ich brauch wieder mal den Rat von euch C-Sharp-Gelehrten :)
Ich habe folgendes programmiert... naja, eher mit Hilfe eines Kollegen:
Ich ändere den Text vom Start-Button bei Windows. Ich möchte, dass dort anstatt Start die aktuelle Uhrzeit steht im Format hh:mm. Das klappt auch soweit. Das aktualisieren macht mir probleme. Wenn ich das mit nem Timer oder BAckgroundWorker mache, dann nutzt das Programm zuviel CPU Power. Wie kann man sowas sinnvoll lösen?
greetz,
sanpan69
Spectus.gn - So 08.10.06 17:35
Also,ich glaube die ganze Sache ist nicht ganz so einfach wie du hoffst.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| using System.Runtime.InteropServices;
SystemTime st = new SystemTime(); SystemTimeFuncs.GetLocalTime(st);
public class SystemTimeFuncs { [DllImport("Kernel32.dll")] public static extern void GetLocalTime([In, Out] SystemTime st); [DllImport("Kernel32.dll")] public static extern bool SetLocalTime([In, Out] SystemTime st); }
[StructLayout(LayoutKind.Sequential)] public class SystemTime { public ushort wYear; public ushort wMonth; public ushort wDayOfWeek; public ushort wDay; public ushort wHour; public ushort wMinute; public ushort wSecond; public ushort wMilliseconds; } |
Das müsste der Code zum bekommen der aktuellen SystemZeit sein.
und nun zum ausschalten der CPU-schlacht.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| using System.Threading;
Thread.Sleep(n);
Thread.Sleep((60-st.wSecond)*1000); |
Hoffe es funzt und du schreibst mir, wenn du fragen hast.
MfG
Carsten
PS.: Wähle das nächste mal bitte ein passenderes Thema.
SanPan - So 08.10.06 21:23
Hey Carsten,
schonmal danke soweit. Das mit dem Threading funktioniert soweit recht gut.
Nur er hängt dabei meine Form auf :(
Ich kopier mal schnell meinen gesamten Quelltext:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74:
| using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;
using System.Runtime.InteropServices; using System.Threading;
namespace Start_Again { public partial class sa_form_mainform : Form { [DllImport("user32")] private static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32")] private static extern IntPtr FindWindowEx(IntPtr hWnd1, IntPtr hWnd2, string lpsz1, string lpsz2); [DllImport("user32")] private static extern bool SetWindowText(IntPtr hWnd, string lpString); [DllImport("user32")] private static extern int EnableWindow(IntPtr hWnd, bool bEnable);
public void sa_function_SetStartButtonText(string aText) { IntPtr HWnd;
HWnd = FindWindow("Shell_TrayWnd", String.Empty); HWnd = FindWindowEx(HWnd, IntPtr.Zero, "Button", null); SetWindowText(HWnd, aText); EnableWindow(HWnd, false); EnableWindow(HWnd, true); }
public void sa_function_RefreshStartButtonText() { bool x=true;
while (x) { Thread.Sleep(1000); sa_function_SetStartButtonText(DateTime.Now.ToShortTimeString()); } }
public sa_form_mainform() { InitializeComponent();
sa_function_RefreshStartButtonText(); } } } |
Kha - So 08.10.06 21:31
Dein erster Ansatz mit einem Timer ist völlig genügend. Du musst dabei aber etwas falsch gemacht haben, wenn du bei einem Intervall von 60000 mehr als 1% CPU verbrätst ;) .
@ Spectus.gn: System.DateTime.Now :gruebel: ?
SanPan - So 08.10.06 21:49
Okay, jetzt muss ich mich schämen. Hab in der Eile in der ich es fertig haben wollte ganz das TimerIntervall vergessen :oops:
Hab ihn jetzt wieder drin und er läuft sogar mit einer Sekunde ohne Probleme.
Thx, Khabarakh.
Dann will ich mich jetzt mal mit den anderen Problemen in dem Mini-Programm auseinandersetzen :D
Spectus.gn - So 08.10.06 21:55
Zitat: |
@ Spectus.gn: System.DateTime.Now ?
|
Wenn du mir das erklären kannst, wie das gehen soll, dann wäre ich sehr dankbar.
Hab im Netz nur diese Variante gefunden.
Danke schonmal im voraus.
Spectus
Kha - Mo 09.10.06 14:31
Da Now eine read-only Property ist, lässt sich die aktuelle Systemzeit zwar nur lesen und nicht setzen, aber mehr war ja auch gar nicht gefordert.
Spectus.gn - Mo 09.10.06 14:34
danke für den Tipp, muss ich mir merken ;)
THX
MfG
Carsten
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!