Kokujou Geschrieben 9. Februar 2017 Melden Share Geschrieben 9. Februar 2017 Hi! Ich bin gerade dabei mein Schachprogramm von VisualStudio in Unity zu importieren. vieles ist schon geschafft aber jetzt macht mir das Multithreading Probleme In VisualStudio hab ich Tasks benutzt. Ich weiß in Unity gibt es Coroutinen die mir auch besser gefallen aber mir fehlen einige wichtige Funktionen. Ich führer hunderte vielleicht tausende Tasks gleichzeitig aus und Coroutinen haben keine WaitAll Methode. also wie realisiere ich die WaitAll Methode mittels Coroutinen? Es ist immens wichtig dass alle Threads gleichzeitig laufen! Danke schonmal! Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Djeurissen Geschrieben 9. Februar 2017 Melden Share Geschrieben 9. Februar 2017 Coroutinen sind keine Threads. Die werden alle im Mainthread aufgerufen. Das einzige was Unity macht ist auszunutzen das Funktionen "pausiert" werden sobald etwas mit yield return zurückgegeben wird. Trotzallem werden die Coroutinen nur gespeichert und nacheinander im Mainthread aufgerufen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kokujou Geschrieben 9. Februar 2017 Autor Melden Share Geschrieben 9. Februar 2017 Coroutinen sind keine Threads. Die werden alle im Mainthread aufgerufen. Das einzige was Unity macht ist auszunutzen das Funktionen "pausiert" werden sobald etwas mit yield return zurückgegeben wird. Trotzallem werden die Coroutinen nur gespeichert und nacheinander im Mainthread aufgerufen. das ist unschön... und wie realisiert man dann multithreading in Unity? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Djeurissen Geschrieben 9. Februar 2017 Melden Share Geschrieben 9. Februar 2017 So wie du bereits zuvor vorgegangen bist. Der einzige Unterschied ist, du darfst keine Methoden von Unity benutzen weil die nicht Threadsafe sind. Aber niemand hindert dich daran im Hintergrund alles per Threads zu berechnen und dann an einem Punkt die Ergebnisse dann an Unity "weiterzuleiten" Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kokujou Geschrieben 9. Februar 2017 Autor Melden Share Geschrieben 9. Februar 2017 Unity unterstützt aber keine Tasks. Unity hat offenbar noch kein Net 4.5 oder 4.0, keine ahnung welche Version Threading.Tasks namespace ist. und normale Threads haben keine Waitall Methode. Und es ist vor allem komisch! Ich hab gerade mal gesucht und die System.Threading.Tasks DLL gefunden undzwar im Mono verzeichnis. Was soll das? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 9. Februar 2017 Melden Share Geschrieben 9. Februar 2017 Ich verstehe dein Problem mit Threads nicht so ganz. Du kannst mit IsAlive nachschauen, ob er noch arbeitet, und mit Join() den ausführenden Thread blockieren, bis der andere Thread fertig ist. Da du in Unity vermutlich weniger blockieren willst, kannst du wunderbar mit IsAlive warten: private Thread thread; public void StartDoingStuff() { thread = new Thread(new ThreadStart(DoStuff)); thread.Start(); } void Update() { if(thread != null && !thread.IsAlive) { print("Thread ist fertig!"); thread = null; } } Kann man auch wunderbar in eine Coroutine bauen, dazu habe ich auch mal eine praktische Klasse gepostet. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kokujou Geschrieben 9. Februar 2017 Autor Melden Share Geschrieben 9. Februar 2017 Naja ich kenn mich mit Threads nicht wirklich aus. Darum kannte ich die funktionen nicht. Ich weiß nur bei Tasks rufst du einfach den Task auf, der wohl nichtmal statisch sein muss, rufst danach Waitall für das Array von Tasks auf und wartest so bis jeder fertig ist. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 9. Februar 2017 Melden Share Geschrieben 9. Februar 2017 Hier hast du eine Erklärung der Unterschiede. Tasks sind schon vorteilhaft, existieren aber scheinbar erst ab .NET 4. Von daher sieht's mit der Verwendung in Unity nicht allzu prickelnd aus (obwohl sie ja Prototypen für aktuelle .NET-Versionen haben). Wenn du Threadpooling haben willst, gibt's auch ohne Tasks die Threadpool-Klasse. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kokujou Geschrieben 9. Februar 2017 Autor Melden Share Geschrieben 9. Februar 2017 Ich hab schon versucht die DLL einfach einzubinden aber so einfach gehts leider nicht. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 9. Februar 2017 Melden Share Geschrieben 9. Februar 2017 Ja ne, lass das mal Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kokujou Geschrieben 9. Februar 2017 Autor Melden Share Geschrieben 9. Februar 2017 weißt du wann Unity das repariert? Oder obs überhaupt geplant ist? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 9. Februar 2017 Melden Share Geschrieben 9. Februar 2017 Ich sag' doch schon, es gibt 'nen Prototypen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kokujou Geschrieben 9. Februar 2017 Autor Melden Share Geschrieben 9. Februar 2017 wow! das probiere ich gleich aus! Danke! Heißt Editor Only dass es garkeine möglichkeit zum builden gibt? Oder gibts dafür auch nen trick? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kokujou Geschrieben 11. Februar 2017 Autor Melden Share Geschrieben 11. Februar 2017 Jetzt mal ernsthaft. Wann glaubst du kann ich auch mit Net 4.x Builden? Nächsten Monat sollte das Programm endlich fertig sein und da sollte es buildbar sein. Soll ich auf diese Weise weiterarbeiten? Oder soll ich lieber Threads statt Tasks verwenden und auf nummer sicher gehen? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 11. Februar 2017 Melden Share Geschrieben 11. Februar 2017 Ich gehe nicht davon aus, dass das nicht sonderlich schnell kommen wird. Wenn du im März builden können willst, bleib beim stable release. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kokujou Geschrieben 11. Februar 2017 Autor Melden Share Geschrieben 11. Februar 2017 war die doppelte Verneinung beabsichtigt? ^^ Das klang grad komisch. Also soll ich den Editor-Only Release verwenden und dann warten bis die Build-Optionv erfügbar ist? Oder soll ich auf Threads umsteigen? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 11. Februar 2017 Melden Share Geschrieben 11. Februar 2017 Nö, war ein Brainfart Ich würd' auf stable bleiben. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kokujou Geschrieben 11. Februar 2017 Autor Melden Share Geschrieben 11. Februar 2017 OK dann werdich mich mal mit den threads beschäftigen... yeii... *seufz* Das gibt bestimmt noch Probleme. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.