Olen tehnyt sellaisen yksinkertaisen ohjelman, joka looppaa niin kauan, kunnes hiiri laitetaan vasempaan yläkulmaan (0,0). Tämä toimii ihan hyvin, mutta loopissa on käytetty netistä löytämääni valmista wait()-funktiota. Wait()-funktio pausettaa ohjelman suorituksen tietyksi ajaksi. Jos siis laitan hiiren vasempaan yläkulmaan, kun ohjelma odottelee vielä, niin se ei lopeta ohjelmaa vielä. Ohjelma sammuu siis vasta sen tietyn ajan jälkeen. Esim. jos ajaksi on määritetty 30 sekuntia, niin minun tarvitsee odottaa se 30 sekuntia hiiri vasemmassa yläkulmassa, ennenkuin ohjelma sammuu. Olisiko tähän jotain ratkaisua tai vaihtoehtoista funktiota?
void wait(clock_t odotus) { clock_t aika1, aika2; aika1 = clock(); aika2 = clock(); while (aika2 - aika1 <= odotus) aika2 = clock(); } int main() { POINT pt; loop = true; vali = 30000; while(loop == true) { cout << "moi\n"; wait(vali); GetCursorPos(&pt); if(pt.x == 0 && pt.y == 0) { loop = false; } } }
Tähän on varmaan jokin hyväkin ratkaisu olemassa, mutta yksinkertainen konsti olisi vaikka semmoinen, että sen sijaan, että odotat 30 sekuntia, odotatkin 30 kertaa yhden sekunnin ja käyt joka sekunnin välein katsomassa, että missä hiirulainen makoilee.
Tuo wait-funktio on muuten vähän huono. Se pyörii luupissa 100% cpu:n käyttöasteella, mikä ei ole oikein sivistynyttä moniajokäyttiksissä. Kannattaa käyttää mieluummin käyttiksen kirjastoista löytyviä sleep-, Sleep- tms. funktioita.
Eikö tuota kursorin sijaintia voisi tarkistella tuon odottamisfunktion loopissa?
Tarkistetaan ensin onko se kursori kohdassa (0,0) ja poistutaan loopista jos on.
while(loop == true) { cout << "moi\n"; GetCursorPos(&pt); if(pt.x == 0 && pt.y == 0) { break; } else { wait(vali); } }
Eipäs kun joo SirDayBatillahan on oikea ratkaisu.
Aihe on jo aika vanha, joten et voi enää vastata siihen.