Hallo Ich bin ein C# Noop komme aus der Pascal C++ Welt
und schreibe ein C# Program für meine Bedürfnisse um.
Ich habe das ein Verständnis Problem
public void Loop()
{
CPUMainboard_t Temperature;
Temperature = GetSystemInfo();
var command = new SendCommand((int)Command.kCore4Speed,
f.ToString());
_cmdMessenger.SendCommand(command);
Der Author definiert eine Loop Schleife in main und das vertsähe ich
nicht
>var command = new SendCommand((int)Command.kCore4Speed, f.ToString());
In C++ oder Pascal wird mit new ein Neues Object erstellt und auf dem
Heap abgelegt ist das in C# nicht der Fall was macht das new hier,
erstellt es nur eine neue Instanz ohne neuen Speicher anzufordern. Einen
schönen Tag noch.
:
Bearbeitet durch User
Martin M. schrieb: >>var command = new SendCommand((int)Command.kCore4Speed, f.ToString()); > > In C++ oder Pascal wird mit new ein Neues Object erstellt und auf dem > Heap abgelegt ist das in C# nicht der Fall was macht das new hier, > erstellt es nur eine neue Instanz ohne neuen Speicher anzufordern. Einen > schönen Tag noch.
1 | command |
ist nach dieser Zeile ein Object vom Typ
1 | SendCommand |
Das
1 | var |
überlässt dem Compiler die Wahl, welchen Typ er hier verwendet. Und ja, es wird Speicher alloziert. merciless
Martin M. schrieb: > Der Author definiert eine Loop Schleife in main und das vertsähe ich > nicht Bloß, weil das Ding "Loop" heißt, ist es noch lange keine. Die Funktion wird irgendwo - vermutlich regelmäßig - aufgerufen. Den Rest hat Dirk schon erklärt.
Steht doch da, es wird eine neues Objekt erzeugt:
1 | var command = new SendCommand(...) |
Und der Konstruktor hat eben zwei Parameter:
1 | var erster = (int)Command.kCore4Speed; |
2 | var zweiter = f.ToString(); |
3 | |
4 | var command = new SendCommand(erster, zweiter); |
Dirk K. schrieb: > Und ja, es wird Speicher alloziert. Danke wie kann man den freigeben in Pascal wirt mit object.free der Speicher wieder freigegeben. I denke mal das macht C# automatisch als Moderne Sprache. Die fertige Loop function sieht so aus und funktioniert tadellos
1 | public void Loop() |
2 | {
|
3 | //CPUMainboard.GetSystemInfo();
|
4 | |
5 | CPUMainboard_t Temperature; |
6 | Temperature = GetSystemInfo(); |
7 | |
8 | var command1 = new SendCommand((int)Command.kCore1Temp, Temperature.TempCore1); |
9 | _cmdMessenger.SendCommand(command1); |
10 | |
11 | var command2 = new SendCommand((int)Command.kCore2Temp, Temperature.TempCore2); |
12 | _cmdMessenger.SendCommand(command2); |
13 | |
14 | var command3 = new SendCommand((int)Command.kCore3Temp, Temperature.TempCore3); |
15 | _cmdMessenger.SendCommand(command3); |
16 | |
17 | var command4 = new SendCommand((int)Command.kCore4Temp, Temperature.TempCore4); |
18 | _cmdMessenger.SendCommand(command4); |
19 | |
20 | var command5 = new SendCommand((int)Command.kCore1Clock, Temperature.ClockCore1); |
21 | _cmdMessenger.SendCommand(command5); |
22 | |
23 | var command6 = new SendCommand((int)Command.kCore2Clock, Temperature.ClockCore2); |
24 | _cmdMessenger.SendCommand(command6); |
25 | |
26 | var command7 = new SendCommand((int)Command.kCore3Clock, Temperature.ClockCore3); |
27 | _cmdMessenger.SendCommand(command7); |
28 | |
29 | var command8 = new SendCommand((int)Command.kCore4Clock, Temperature.ClockCore4); |
30 | _cmdMessenger.SendCommand(command8); |
31 | |
32 | var command9 = new SendCommand((int)Command.kGPUClock, Temperature.ClockGPU); |
33 | _cmdMessenger.SendCommand(command9); |
34 | |
35 | var command10 = new SendCommand((int)Command.kGPUTemp, Temperature.TempGPU); |
36 | _cmdMessenger.SendCommand(command10); |
37 | |
38 | |
39 | DateTime LocalDate = DateTime.Now; |
40 | DateTime utcDate = DateTime.UtcNow; |
41 | |
42 | |
43 | int Month = LocalDate.Month; |
44 | int Year = LocalDate.Year; |
45 | int Day = LocalDate.Day; |
46 | |
47 | int Hour = LocalDate.Hour; |
48 | int Min = LocalDate.Minute; |
49 | int Sec = LocalDate.Second; |
50 | |
51 | string date = String.Format("--> {0}:{1}:{2} {3}.{4}.{5} <--\r", Hour, Min, Sec, Day, Month, Year); |
52 | |
53 | Console.Write("Counter : "); |
54 | Console.WriteLine(Counter++); |
55 | |
56 | var command11 = new SendCommand((int)Command.kGetTime, date); |
57 | _cmdMessenger.SendCommand(command11); |
58 | |
59 | Thread.Sleep(2500); |
60 | }
|
Und ja Loop wurde in Main definiert
1 | |
2 | static void Main(string[] args) |
3 | {
|
4 | Console.WriteLine("Start the application..."); |
5 | |
6 | var receive = new CPUMessenger_t { RunLoop = true}; |
7 | receive.Setup(); |
8 | while (receive.RunLoop) receive.Loop(); |
9 | receive.Exit(); |
10 | |
11 | }
|
12 | }
|
13 | }
|
Konnte sogar ein Admin Manifest hinzufügen wirklich einfach. Muss eigentlich um die C# Programme auszuführen auf allen Rechnern Net Installiert sein damit die Exe ausführbar ist.
Martin M. schrieb: > Die fertige Loop function sieht so aus Oh man... Man, man, man... So was tut doch weh...
Martin M. schrieb: > Dirk K. schrieb: >> Und ja, es wird Speicher alloziert. > > Danke wie kann man den freigeben in Pascal wirt mit object.free > der Speicher wieder freigegeben. Das macht der Garbage-Collector automatisch. In deinem Fall würde ich die Commands in einen Container packen und nicht alle 2,5 Sekunden neu erzeugen. merciless
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.