Pontos időzítés Delphiben
2003-11-11T11:54:39+01:00
2003-11-12T15:04:31+01:00
2022-06-29T07:10:47+02:00
  • Te tudod.
    A delaykemmel printer porton tudtam 1-2 millisecet is.
    Mutasd a teljes hozzászólást!
  • Rendben. Végülis jól hangzik, mert ugye a multimédia eseményeknél igen pontos időzítésre van szükség. Nem mindegy, hogy meddig tart egy videó lejátszás
    Mutasd a teljes hozzászólást!
  • ha megbízható időzítés kell, használj mmtimer-t. többet nem mondom, döntsd el te mire van szükséged.

    d5
    Mutasd a teljes hozzászólást!
  • Köszönöm a hozzászólásokat, de a másik topicban ajánlott sleep eljárás nálam bevált. Oszcilloskóppal megnéztem és szép jelek jönnek ki a porton még a 486-os régi masinán is. Igaz a 5 ms-t helyett 15 ms -ig tart a váltás a porton, de a P4-es gépen sem volt jó mindig ilyen kis érték esetén. Kicsit módosítom a progit a biztonságos müködés érdekében, és nem lesz kritikus, ha egy két váltás picit elhúzódna.

    Üdv.: NickE
    Mutasd a teljes hozzászólást!
  • Az üzenetalapú TTimer időzítés nem garantált. Helyette egy szekvenciális várakozást csinálhatánl.
    A gettickcount fgv. (windows unit) tökeletesen alkalmas erre. Azaz megvárod, amig az érték eléri az 5msec-et.
    A www.torry.ru oldalon találhatóak a következők: Threaded Timer, TimerEx, TSuperTimer.
    Mutasd a teljes hozzászólást!
  • multimédia timer, lásd MMTimer a helpben

    d5
    Mutasd a teljes hozzászólást!
  • Most látom, hogy van egy hasonló téma.
    Tudástár - Prog.Hu

    Bocsi, de a keresőben idő időzités és hasonlókra keresve nem találtam, mert ott "Késleltetés másképp Delphi-ben" -nek nevezték.
    Mutasd a teljes hozzászólást!
  • CBuilderezek,igy CSAK C-ben tudok adni neked milliseces sajat kesleltetes fuggvenyt:

    "void delay(double millsec)
    {
    static LARGE_INTEGER _tstart, _tend;
    double data=0;
    static LARGE_INTEGER fre;
    int k;

    static int first = 1;
    millsec/=1000;
    while (true)
    {
    if(first)
    {
    QueryPerformanceFrequency(&fre);
    first = 0;
    }

    QueryPerformanceCounter(&_tstart);
    for(k=0;k<10;k++);

    QueryPerformanceCounter(&_tend);

    if (millsec < data)
    return;
    data+=((double)_tend.QuadPart -
    (double)_tstart.QuadPart)/(double)fre.QuadPart;

    }
    }"
    Mutasd a teljes hozzászólást!
  • Sajnos a Timer időzítőkomponens nem túlzottan pontosan időzít kis érték esetén. A lényeg az, hogy porton keresztüli kapcsolgatáshoz kellene egy olyan időzitő, melynél kb. 5 ezredmásodpercet is be lehet állítani, és ezt pontosan is csinálja. Valahol olvastam régebben, hogy van olyan eljárás, melynek mikrosecundumban kell átadni paraméterként a várakozási időt. Ez biztos jobb lenne. A timer mellett a többi komponens párhuzamosan csinálja a dolgát, viszont itt nem hátrány, ha a várakozás idejéig a többi komponens nem dolgozik a pontosság érdekében.
    Mutasd a teljes hozzászólást!
abcd