// demo03.ck // // Készítette: // Kaluzsa Péter - ELTE - 2012/2013-2 // // idő manipulálás // // időtartam definíciók 1::samp => dur sample; <<>>; //mintavételezési idő, függ a VM beállításától 1::ms => dur msec; <<>>; 1::second => dur sec; <<>>; 1::minute => dur min; <<>>; 1::hour => dur h; <<>>; 1::day => dur d; <<>>; 1::week => dur w; <<>>; // a definiált duration-ök felhasználhatóak új duration létrehozásához // valamint a duration-ök összege is duration 7::sample + 6::msec + 5::sec + 4::min + 3::h + 2::d + 1::w => dur mixed; <<>>; // a now kulcsszó tárolja a virtuális gép "jelen" idejének értékét <<>>; // idő definiálása // t0 tartalmazza a jelen időt now => time t0; <<>>; // az időt duration típusú értékkel lehet módosítani t0 + sec + 1::ms => time t1; <<>>; now + 2::second => time t2; <<>>; // két idő különbsége duration t2 - t1 => dur difference; <<>>; // idők és durationök összehasonlíthatóak <<<(t2 < t1)>>>; // hamis = 0 <<<(2::second > 1500::ms)>>>; // igaz = 1 // idő időtartammal vett maradéka // az előző egész másodperc óta eltelt időtartam <<>>; // alkalmazható szinkronizálásra 1000::ms - (now % 1000::ms) => dur timeUntilNextSec; <<>>; <<<1000::ms>>>; // idő léptetése // amíg az idő előre halad, addig a program futása felfüggesztődik // duration segítségével // a megadott időtartamig kerül felfüggesztésre a program <<>>; 2::sample => now; <<>>; 1::msec => now; <<>>; // időpont segítségével // a megadott ideig felfüggesztésre kerül a program <<>>; t1 => now; <<>>; // event segítségével // eseményhez szükséges kód Event e; // eventre váráshoz segédfüggvény, hogy kiváltódjon e esemény fun void signalEvent(dur d) { d => now; e.broadcast(); } spork ~ signalEvent(500::ms); // az adott event szignáljáig vár a program e => now; <<>>;