.[ ČeskéHry.cz ].
Pozastavení vlákna
Jdi na stránku 1, 2  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> .NET
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Sosarian



Založen: 07. 11. 2007
Příspěvky: 51

PříspěvekZaslal: 11. květen 2009, 10:34:10    Předmět: Pozastavení vlákna Odpovědět s citátem

mám následující aplikaci,

metoda main, spustí postupně dvě další vlákna a já potřebuju aby každé jelo jen určitou dobu (třeba 500ms) a pak se pozastavilo (tzn zůstalo stát na té instrukci kde skončilo) a pokračovalo druhý vlákno, a tak pořád dokola

ten kód v tom vláknu může být jakejkoliv takže klidne i while(true) { }, takže se nemůžu spoléhat na to že odchytí nějakou mou zprávu a vypne se kvůli ní.

ty dvě vedlejší vlákna zarás nepojedou, vždy jen hlavní + jedno vedlejší
(myslel sem že něco podobnýho může dělat thread.suspend, ale nejak pisou ze se to enma pouzivat protoze se pak vlakna dostavaji do deadlocku, a kdyz to pouziju tak se mi vlakna zaseknou Smile)

dá se vubec nějak pozastavit vlákno od jinud než z toho vlákna? mám na tohle vůbec používat vlákna? Smile dik

ve zkratce něco takovýho
kód:

main()
{
   foreach (Therad t in threads)
   {
      t.Unpause()
      Thread.Sleep(500)
      t.Pause()
   }
}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 11. květen 2009, 11:42:19    Předmět: Re: Pozastavení vlákna Odpovědět s citátem

Sosarian napsal:
dá se vubec nějak pozastavit vlákno od jinud než z toho vlákna? mám na tohle vůbec používat vlákna? Smile
Napiš, čeho chceš dosáhnout Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Sosarian



Založen: 07. 11. 2007
Příspěvky: 51

PříspěvekZaslal: 11. květen 2009, 11:46:25    Předmět: Odpovědět s citátem

mam vlákno a v nem běží while(true) {} chci ho z jinyho vlakna pauznout a pak odpauznout od toho mista kde sem ho pauzl


jako cely to ma byt pro to ze se pousti metoda (v tom prvnim vlakne) ktera ovlada panacka (neco jako ai) a rika "zacni jit do leva", "zacni strilet",
a na to aby mu rekl a co ma delat ma omezenej cas,
a pak se ma pustit dalsi metoda (v tom druhym vlakne) ktera rika co ma delat jinymu panackovy

de o to aby ta metoda nemela neomezenej cas na rozhodnuti co se bude dit a nebo tam nekdo nemohl napsat nekonecnej cyklus a zastavit hru
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
sulthan



Založen: 24. 10. 2007
Příspěvky: 104

PříspěvekZaslal: 11. květen 2009, 12:16:11    Předmět: Odpovědět s citátem

no, systemovy vlakno se ti nikdy nezastavi tam, kde budes chtit. To proste nepujde. Nemluve o tom, ze pauzovat vlakno z jineho vlakna se mi zda na jednoprocesoru docela blbost Smile

Udelej to jinak... primo v tom vlakne si kontroluj, jestli to vlakno uz nebezelo moc dlouho a kdyztak at se samo ukonci.
Uvedom si, co to znamena "vlakno", jak se chova... a ze ve vetsine pripadu ti najednou pobezi skutecne jen jedno jedine vlakno (uz ten for cyklus pres hromadu vlaken me docela zarazil).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 11. květen 2009, 12:22:59    Předmět: Odpovědět s citátem

Jestli jsem to dobře pochopil, tak děláš na nějakém skriptování pro nějakou hru, přičemž chceš zajistit, aby skript (reprezentovaný metodou, která se spustí ve svém vlákně) běžel jen určitou dobu. Je to tak?

To je docela složitá věc, protože se nemůžeš spolehnout na to, co kdo do skriptu napíše. Jediné řešení, které mě napadá, je proložit si CIL kód testováním, zda nemá být vlákno pozastaveno (což nebude jednoduché). Ale možná Ti jde o něco jiného...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Mem



Založen: 28. 07. 2007
Příspěvky: 1959
Bydliště: Olomouc

PříspěvekZaslal: 11. květen 2009, 12:33:41    Předmět: Odpovědět s citátem

Chápu to stejně jako Augi. Přemýšlím, jak jsme to řešili my ve škole při soutěži ActiveX komponent dámy ve webovém prohlížeči... asi vytvořením vlákna a jeho killnutím po uplynutí času (s tím že pro každý další tah se mu posílala situace na hrací ploše, to bys mohl udělat taky, načítat a předávat celý herní stav)
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Sosarian



Založen: 07. 11. 2007
Příspěvky: 51

PříspěvekZaslal: 11. květen 2009, 12:35:20    Předmět: Odpovědět s citátem

2sulthan: no jak sem psal v tom vlakne muze bezet cokoliv a ja nejsem ten kdo ho pise, nejde o to abych to zastavoval presne na ms, ale aby to nebezelo 5 sec misto 1

vim ze zaras bezi jen jedno vlakno, ale i v tom nekonecnym cyklu to obcas vyskoci a necha to bezet jiny vlakno


2Augi: to je chytry, stacilo by to dat pred vsechny skoky a treba za kazdou 10tou instrukci



de tu o to co sem psal nahore, dve AI se jedna po druhe rozhoduji co bude delat (maji na to omezenej cas) a az se rozhodnou v hlavni smycce se pusti neco co simuluje par sec hry, a pak se zas rozhodujou



2Mem: jo tak to mam ted, ale moc se mi nelibilo porad vytvaret novy vlakno Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 11. květen 2009, 12:41:41    Předmět: Odpovědět s citátem

No problém je, že bys musel tím testem proložit nejen instrukce v metodě, ale také instrukce ve všech metodách, které ta hlavní skriptovací metoda volá. Nebo zakázat volání jiných metod ze skriptu (to bys mohl ohlídat během generování nového kódu metody). Každopádně by to bylo pěkné cvičení na CIL Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Mem



Založen: 28. 07. 2007
Příspěvky: 1959
Bydliště: Olomouc

PříspěvekZaslal: 11. květen 2009, 12:41:59    Předmět: Odpovědět s citátem

IRC napsal:
[13:38] Memoza: AugiTreballant: my jsme navic meli ty komponenty umyslne udelane tak, ze vypocet bezel v samostatnem vlakne, a verejne rozhrani vracelo na pozadani v tu chvili nejlepsi tah (takze prohledavani do hloubky postupne vracelo lepsi tahy a zalezelo do jake urovne to stihlo)
[13:40] AugiTreballant: Memoza, hehe, to je taky dobry Smile
[13:40] AugiTreballant: Memoza, ze to na prvni pohled vypada hrozne slozite, ale vlastne je to uplne jednoduche Smile
[13:40] Memoza: jj Wink

_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 11. květen 2009, 12:43:38    Předmět: Odpovědět s citátem

Btw. pokud má strach z výkonu kvůli vytváření nového vlákna, tak mrkni na ThreadPool.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Sosarian



Založen: 07. 11. 2007
Příspěvky: 51

PříspěvekZaslal: 11. květen 2009, 12:44:25    Předmět: Odpovědět s citátem

2Augi:
no ted nedavno sem si napasl interpret kterej zvladal dost instrukci, takze to problem nebude Smile
http://grim.havoc.sweb.cz/CLI.jpg

stejne sem to chtel prohlizet a kontrolovat jestli nevolaji reflexy, nebo nevytvari dalsi vlakna apod


Naposledy upravil Sosarian dne 11. květen 2009, 12:48:02, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 11. květen 2009, 12:47:45    Předmět: Odpovědět s citátem

Ještě mě teď napadlo jedno řešení a to přes Expression Trees.
http://www.davidhayden.com/blog/dave/archive/2006/12/18/ExpressionTrees.aspx
http://msdn.microsoft.com/en-us/library/bb397951.aspx
http://community.bartdesmet.net/blogs/bart/archive/2006/11/22/Getting-started-with-C_2300_-3.0-Expression-Trees.aspx
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Sosarian



Založen: 07. 11. 2007
Příspěvky: 51

PříspěvekZaslal: 11. květen 2009, 12:52:56    Předmět: Odpovědět s citátem

do expression tree dostanu snad jen lambda vyraz, ne jakoukoliv metodu, ne?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 11. květen 2009, 12:59:20    Předmět: Odpovědět s citátem

Jj, ani lambda expression se statement body tam neprotlačíš. Takže jako nejuniverzálnější opravdu vidím to generování CILu. A pokud máš CIL už nastudovaný, tak to myslím nebude až zas takový problém. Pak se pochlub s výsledkem Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 11. květen 2009, 13:57:21    Předmět: Odpovědět s citátem

Neprocital jsem diskuzi, ale kdyz uz budes vkladat CIL instrukce, byt tebou bych se podival, jak se to resi u yield return (coz je zpusob, jak de facto mit vic nezavislych zasobniku v jednom vlakne).
_________________
http://trionteam.net
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> .NET Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna