|
You last visited: Today at 19:35
Advertisement
Asynchrones Sleep in Konsolen Anwendung
Discussion on Asynchrones Sleep in Konsolen Anwendung within the .NET Languages forum part of the Coders Den category.
10/07/2013, 00:47
|
#1
|
elite*gold: 3570
Join Date: Dec 2012
Posts: 13,044
Received Thanks: 8,252
|
Asynchrones Sleep in Konsolen Anwendung
Wie kann ich ein Async Sleep schreiben?
Bei einer Form Anwendung würde ich einen Backgroundworker nutzen.
Aber bei Konsolen habe ich keinen Plan, da ich davor damit nie gearbeitet habe.
Google hat mir leider keine hilfreichen Ergebnisse gebracht.
|
|
|
10/07/2013, 02:19
|
#2
|
elite*gold: 0
Join Date: Dec 2012
Posts: 27
Received Thanks: 2
|
Thread
Mit der Thread Klasse!
Code:
System.Threading.Thread newThread;
newThread = new System.Threading.Thread(Sleeper);
newThread.Start();
private void Sleeper()
{
Threading.Sleep(1000);
Console.Write("ready");
}
|
|
|
10/07/2013, 02:21
|
#3
|
elite*gold: 3570
Join Date: Dec 2012
Posts: 13,044
Received Thanks: 8,252
|
So würde ich es gerne machen.
Aber ich möchte die Zeit individuell machen.
Also Parameter übergeben. Nur mit dieser Methode meckert VS ja rum.
|
|
|
10/07/2013, 02:28
|
#4
|
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
|
Wie siehts aus mit Lambdas?
Code:
int time = 1000;
System.Threading.Thread newThread = new System.Threading.Thread(() => Sleeper(time));
das sollte funktionieren. Ansonsten kannst du ja mal hier im MSDN nachschauen, .Start() kannst du auch mit einem Objekt als Parameter aufrufen:
|
|
|
10/07/2013, 02:44
|
#5
|
elite*gold: 3570
Join Date: Dec 2012
Posts: 13,044
Received Thanks: 8,252
|
Danke schonmal.
Aber in meinem Code scheint was nicht zu stimmen. Also jetzt nichts mehr mit dem Sleep.
Code:
ElseIf content.StartsWith("S|CFG|1") Then
If canSwitch = True Then
Me.Send("0|S|CFG|1")
canSwitch = False
Dim newThread As New System.Threading.Thread(Sub() AsyncSleep(5000))
newThread.Start()
canSwitch = True
Else
Me.Send("0|A|STD|You have to wait 5 seconds after the last change")
End If
ElseIf content.StartsWith("S|CFG|2") Then
If canSwitch = True Then
Me.Send("0|S|CFG|2")
canSwitch = False
Dim newThread As New System.Threading.Thread(Sub() AsyncSleep(5000))
canSwitch = True
newThread.Start()
Else
Me.Send("0|A|STD|You have to wait 5 seconds after the last change")
End If
End If
Kleine Erklärung:
Es gibt 2 Konfigurationen auf einem PServer. Wenn er die erste wählen will, soll er überprüfen, ob er das auch darf. Hab oben einen Boolean auf True gesetzt.
Falls er darf, soll er ihn auf false setzen und dann switchen.
Falls nicht, soll er eine Meldung ingame ausspucken.
Ich kann aber ohne Probleme zwischen den Konfigurationen switchen.
|
|
|
10/07/2013, 12:16
|
#6
|
elite*gold: 100
Join Date: Aug 2005
Posts: 595
Received Thanks: 208
|
Mh, ohne Garantie aber so vom drüberschauen, du erstellst einen neuen Thread
Dim newThread As New System.Threading.Thread(Sub() AsyncSleep(5000))
Dieser wartet vermutlich auch seine 5 Sekunden, aber das ist ja garnicht was du willst, der Witz an Threads ist ja gerade das der aufrufende Thread weiterläuft sobald er den neuen Thread gestartet hat
Mh also etwa so
Thread 1: if abfrage --> bool setzen -> thread starten -> bool setzen ->ende
Thread 2: 5 Sekunden warten ------------------> ende
Thread 2 läuft praktisch Zeitgleich mit dem ersten.
Hoffe du verstehst was ich meine
|
|
|
10/07/2013, 12:57
|
#7
|
elite*gold: 3570
Join Date: Dec 2012
Posts: 13,044
Received Thanks: 8,252
|
Du meinst, dass der Sleep ausgeführt wird, nur die Konsole nichts davon mitbekommt und sofort wieder auf true setzt?
|
|
|
10/07/2013, 13:54
|
#8
|
elite*gold: 46
Join Date: Oct 2010
Posts: 782
Received Thanks: 525
|
Dein neuer Thread muss den Bool setzen und ggf das packet senden. Sollte eig klappen. Und die Konsole bekommt das mit das der Thread gemacht wird, aber sie wartet nicht bis der Thread zu Ende ist. Nur der Thread wartet 5 sek, aber die Konsole setzt nach ~0.1 Sek den Wert wd auf True.
|
|
|
10/07/2013, 14:09
|
#9
|
elite*gold: 3570
Join Date: Dec 2012
Posts: 13,044
Received Thanks: 8,252
|
Der Sleep muss aber auch woanders genutzt werden können.
Wie könnte man das dann lösen?
|
|
|
10/07/2013, 14:12
|
#10
|
elite*gold: 0
Join Date: May 2010
Posts: 88
Received Thanks: 23
|
Da ich nicht gerne ganze codeteile poste nur mal ne andere kleine sache:
1. Task.Delay(time)
2. ContinueWith....
sehr praktisch und nutzt automatisch die ThreadPool klasse aus und bei anderne wuenschbaren settings kann man diese noch setzten (mal bissle mit der netten Task Klasse und async in .net 4.5 beschaeftigen).
Das ganze erspart einem nacher genug aerger
|
|
|
10/07/2013, 14:12
|
#11
|
elite*gold: 46
Join Date: Oct 2010
Posts: 782
Received Thanks: 525
|
Wie woanders genutzt werden ? Kannst doch viel threads machen für verschiedene Sachen :P ist nur resourcenlastig aber mir ist auch keine andere Lösung bei dem pserver eingefallen. Ich kann nacher mal paar Leute fragen die sowas eig können sollten  Muss dafür aba erstmal aus der Schule raus xD
Edit : bessere Antwort schon gepostet....
|
|
|
10/07/2013, 14:22
|
#12
|
elite*gold: 3570
Join Date: Dec 2012
Posts: 13,044
Received Thanks: 8,252
|
Mit woanders, meine ich, dass das AsyncSleep nicht nur dafür genutzt werden soll.
Und 500 neue Subs wäre auch nicht geil
Das habe ich nun jedenfalls gelöst. Danke euch.
@omitma.
Gleiche Packets wie beim altem VB Emu. Läuft in der Konsole problemlos
|
|
|
10/07/2013, 15:23
|
#13
|
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
|
Drück dich mal klar aus was du erreichen willst. Nicht wie du es erreichen willst. Dein Weg scheint mir ziemlich suspekt.
|
|
|
10/07/2013, 16:37
|
#14
|
elite*gold: 46
Join Date: Oct 2010
Posts: 782
Received Thanks: 525
|
Er will, dass wenn jemand im Client etwas nutzt und sein Server das packet dafür bekommt, dass dann ein wert geprüft wird ob er denn in dem Falle die Configuration ändern kann oder nicht. Falls er sie ändern kann, soll sie geändert werden, ein bool, der angibt ob sie geändert werden kann, auf false gesetzt werden und nach 5 Sek soll dieser bool wieder zu true werden. Er kann nicht einfach Sleep in der else if content... abfrage machen, da dann alle ankommenden packet nicht verarbeitet werden. Falls es halt nicht für Configuration ist, z.b. für irgendeinen skill soll ein anderer bool geprüft werden. Bei dem Server müssen relativ viele cooldowns für nur einen Spiele gecheckt werden. (Ich GLAUBE deswegen möchte er nicht immer einen neuen thread erstellen wenn ein spieler einen skill nutzt. Da kann man aber glaube ich nicht viel anders machen.) Seine letzte Frage war jetzt ob es denn irgendwie Resourcen sparender gehen könnte anstatt 500 (oder mehr) threads am laufen zu haben. Hoffe du hast sein Problem jetzt einigermaßen verstanden.
@Requi wenn ich davon was falsch verstanden hab korigiere mich bitte ^^
|
|
|
10/07/2013, 17:54
|
#15
|
elite*gold: 900
Join Date: Apr 2009
Posts: 14,981
Received Thanks: 11,403
|
closed on request
|
|
|
Similar Threads
|
[AutoIT] Wo Sleep hin ?
10/20/2011 - AutoIt - 4 Replies
Hallo ! Bei mir wiederhohlt sich das Script nicht mit den 2 Sec pause -.- woran liegt es ?
HotKeySet ("{c}", "start")
HotKeySet ("{e}", "Beenden")
Func start()
Run (".....exe")
WinWaitActive ("....")
Send ("test123")
Send ("{enter}")
|
Monitor is going to sleep.
12/19/2010 - Technical Support - 5 Replies
Hallo epvp ,
Ich habe ein Problem undzwar :
Immer wenn ich Half Life 2 spiele kommt nach einer Weile , oder manchmal sogar sofort :
No signal going to sleep - bevor das geschieht wird der Bildschirm schwarz.
Mein System :
Graka : Intel Q35 Express chipset family
Monitor : Fujitsu Simens B17-2
|
All times are GMT +1. The time now is 19:35.
|
|