Funktion warten lassen
-
Heiho,
folgendes
ich habe eine methode welches ein bestimmtes objekt zurueck gibt
(C#+WPF)
diese methode repraesentiert eine einfache KI
das problem ist - sie ist zu schnell, es funktioniert zwar alles, aber ich haette gern ein "delay" welches ein "nachdenken" vorgaukeltdh
pseudo:class KI { public object Run(Arguments arguments) { object result = Calc(arguments); // wait for X seconds/milliseconds return result; } }
ein ansatz waere der backgroundworker, der ein einfaches sleep macht - nur die funktion "Run" soll erst returnieren bis der worker fertig ist
wenn ich das sleep direkt in der methode packe muesste mir meine oberflaeche einfriereneine idee wie ich das problem angehen koennte ?
//grad idee bekommen - evtl pack ich die gesammte KI in einem worker - da muesste ich nur das programm n bissl anders strukturieren das es bei der finish methode erst weiter macht
//naechste idee - im aufrufer ein sleep rein und danach in der finish methode die KI starten - wuerde aber aehnlich aussehen// seh grad - bin im falschen bereich, bitte nach C# verschieben - danke
-
Mr Evil schrieb:
ein ansatz waere der backgroundworker, der ein einfaches sleep macht - nur die funktion "Run" soll erst returnieren bis der worker fertig ist
wenn ich das sleep direkt in der methode packe muesste mir meine oberflaeche einfrierenIch glaub ich versteh dein Problem nicht
Wenn Run erst nach einer gewissen Zeit zu Ende sein soll, nimm ein Sleep. Wenn die GUI derweil nicht einfrieren soll, muessen GUI und Run in verschiedenen Threads laufen.
-
siehe mein pseudo code
ich habe nur eine funktion der KI welches etwas zurueck gibt womit die app arbeitet
diese funktion soll gewisse zeit warten bis sie fertig ist bevor etwas zurueck gegeben wird
dort einen thread starten bringt nichts - da die funktion dann weiter rennen wuerde und nicht wartet bis der worker fertig istvon aussen gibts nur
object result = KI.Run(arguments);darum war meine erste idee - das Run soll warten bis der interne worker fertig ist nur das geht nicht ohne einfrieren der oberflaeche
-
habs jetzt fertig drinne
des hab ich nu so gemacht
die funktion die die KI.Run aufgerufen hat ruft nun einen worker auf
im worker run ist nur eine sleep funktion
und der eigentliche ablauf ist nun in der finish funktiondanke trotzdem
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum C# und .NET verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
EIn Sleep ist keine gute Idee. Sei froh wenn eine Funktin schnell ist.
Sollte sie auf einen anderen Thread warten müssen dann Sync. die beiden Threads.
SCha dir mal in der MSDN die verschiedenen Möglichkeiten dazu an.
Mit Sleep verlangsamst du dein Programm nur unnötig und kannst Dir auch nicht nicht sicher sein das Deine Sleep von der Zeit ausreicht.
-
ne ein sleep ist da schon ok
synchronisiert werden muss nichts, wenn ich muesste wuerd ich auf jeden fall kein sleep nehmen, da hast du absolut recht
es ist ein minispiel wo man gegen bis zu 3 CPU gegnern spielt
und wenn die ki so schnell ist - sieht man nur im verlauf was geschah weil alles durchrast - so sieht es aus als wenn jeder spieler n bissl nachdenken muss - macht den spielfluss angenehmer
ich hab den sleep als random - der gegner wartet nun 1-5 sekunden bis er eine aktion ausfuehrt - genauso schnell wie der menschliche gegner im durchschnitt braucht