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" vorgaukelt

    dh
    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 einfrieren

    eine 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 einfrieren

    Ich 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 ist

    von 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 funktion

    danke 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


Anmelden zum Antworten