Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Auto Refresh C++

Sivun loppuun

Varaosa [10.05.2007 12:53:34]

#

Joo, miten tehdä automaattinen päivitys, joka avaa samaa tiedostoa koko ajan ja jos kyseiseen teidostoon tekee muutoksia niin se näyttää muutokset saman tien!? Käytössä edelleen Borland Builder C++ 5 ja WIN32 -C++ ohjelma.

Kun itse tiedoston avaaminen tapahtuu näin:

Edit1->Lines->LoadFromFile("jotakin.txt");

-Niin, mitä tähän vielä pitäisi lisätä, että se avaisi tätä tiedostoa koko ajan kunnes ohjelma lopetetaan!?

TsaTsaTsaa [10.05.2007 13:59:47]

#

int main() {
   bool ohjelmapyorii = true;

   while (ohjelmapyorii) {

      // Tiedoston avaus.

      // Muuta juttua.

      // Ja jossain vaiheessa ohjelmapyorii = false
   }

   return EXIT_SUCCESS;
}

Varaosa [11.05.2007 11:10:10]

#

Muuten hyvä paitsi, että kun lisään tuon tiedoston avaamisen niin se ei avaa sitä ja kun ohjelma suorritaa tuon omas koodisi niin koko ohjelmani tilttaa tai siis ei mitään tapahdu. Itse ohjelma pitäisi avata tietty tiedosto koko ajan tilttaamatta siten, että ohjelmaa voi vielä käyttää :P...

TsaTsaTsaa [11.05.2007 11:23:15]

#

Niin no WIN32-ohjelmassa main-funktiolla on joku eri nimi ja saattaa olla jo pääsilmukkakin jotenkin valmiina. Mutta tarkoitus kuitenkin on, että tiedoston avaus aina pääsilmukassa.

Metabolix [13.05.2007 16:28:28]

#

Ei kun Borlandin komponenttihommalla kaikki menee aivan eri tavalla.

Ainakin Delphillä, siis luultavasti myös C++ Builderilla, on sellainen automaattisesti luotu Application-objekti, jolla on jotain kivoja jäseniä kuten OnIdle-tapahtuma.

Googleta tai käännä itse C++:lle. Borlandin ohjeet varmaankin auttavat.

{ Itse funktio }
procedure TForm1.IdleLoop(Sender: TObject; var Done: Boolean);
begin
  { Tämä ajetaan aina, kun muut viestit on hoidettu }
  Done := False; { False, jotta tätä kutsuttaisiin uudestaankin }
end;

{ Esim. FormLoad-tapahtumassa tms. asetetaan tuo käyttöön }
Application.OnIdle := IdleLoop;

Varaosa [14.05.2007 08:54:18]

#

Meni nyt aika vaikeaksi, nyt en enään tiedä mitä laittaa tai koodata ;D...

Metabolix [14.05.2007 09:17:21]

#

No jos kerran noin hankalaksi menee, niin ehkäpä sinulle riittävä ratkaisu on Timer-komponentti, joka laukeaa vaikkapa sekunnin välein.

feenix [14.05.2007 16:30:12]

#

Jos siis halutaan tietää kun tietty tiedosto muuttuu ja heti tehdä jokin operaatio, asian voi tehdä oikeinkin. Eli siis käytetään Win32-APIn funktioita jotka kutsuvat callbackia kun haluttu tiedosto/hakemisto muuttuu. Timerien ja muiden kuormitus on hieman turhaa, mutta voihan siitä lähteä asiaa kokeilemaan.

Nyt kun vain saisin päähäni mitkä funktiot tuon hoitivat, siitä on hetki kun tuota viimeksi käytin ja koodit on muualla :P

neau33 [15.05.2007 02:29:19]

#

Heippa taas!

API-purkkaa

//...
FindFirstChangeNotificationA(LPCWSTR lpPathName,
       BOOL bWatchSubtree, DWORD dwNotifyFilter);

//...

FindNextChangeNotification(HANDLE hChangeHandle);
//...osv.

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta