Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C, C++, VB6: UpTime (vb)

Sivun loppuun

millerii [29.10.2003 11:54:46]

#

Mitenkäs VB:llä sais windowsin käynnissäoloajan esille?

Antti Laaksonen [29.10.2003 16:11:45]

#

Käynnissäoloaika millisekunteina selviää helposti WinApin GetTickCount-funktion avulla. Enemmän koodia tarvitaan sitten siihen, että millisekunnit muutetaan käyttäjälle järkevämpään muotoon. Tämä onnistuu, kun tiedetään että päivässä on 86400, tunnissa 3600 ja minuutissa 60 sekuntia.

Private Declare Function GetTickCount Lib "kernel32" () As Long

Private Sub Form_Click()
    Dim koa As Long
    Dim paivat As Integer, tunnit As Integer
    Dim minuutit As Integer, sekunnit As Integer

    koa = GetTickCount
    koa = koa / 1000

    paivat = koa \ 86400
    koa = koa - paivat * 86400
    tunnit = koa \ 3600
    koa = koa - tunnit * 3600
    minuutit = koa \ 60
    koa = koa - minuutit * 60
    sekunnit = koa

    MsgBox "Järjestelmä on ollut käynnissä " & _
           paivat & " päivää, " & _
           tunnit & " tuntia, " & _
           minuutit & " minuuttia ja " & _
           sekunnit & " sekuntia."
End Sub

Meitsi [29.10.2003 21:22:09]

#

miten sa ton uptimen c++ssalla???

Antti Laaksonen [29.10.2003 21:46:00]

#

No Windows-ympäristössä tuo menee ihan samalla tavalla, tässä käännös C-kielelle.

#include <windows.h>

int main(void) {
    long koa;
    int paivat, tunnit, minuutit, sekunnit;

    koa = GetTickCount();
    koa = koa / 1000;

    paivat = koa / 86400;
    koa = koa - paivat * 86400;
    tunnit = koa / 3600;
    koa = koa - tunnit * 3600;
    minuutit = koa / 60;
    koa = koa - minuutit * 60;
    sekunnit = koa;

    printf("Järjestelmä on ollut käynnissä %i päivää, %i tuntia, %i minuuttia ja %i sekuntia", paivat, tunnit, minuutit, sekunnit);
}

Meitsi [29.10.2003 21:55:30]

#

kiitti!
EDIT: miten sais ton tehtyä silleen se avais win-apilla messageboxin jonne se kirjottas ton litanian ja lopettais ohjelman saman tien. siis se vaan näyttäis ton ajan ja ohjelma sulkeutus ilman että aukeaa mitään ikkunaa
EDIT:EDIT: oon aika tumpelo näissä c++hommissa

Antti Laaksonen [29.10.2003 22:07:23]

#

Lisää ensinnäkin ohjelman alkuun merkkijonomuuttujan määrittely:

char tieto[100];

Ja sitten korvaa loppu tällä:

sprintf(tieto, "Järjestelmä on ollut käynnissä %i päivää, %i tuntia, %i minuuttia ja %i sekuntia.", paivat, tunnit, minuutit, sekunnit);
MessageBox(0, tieto, "Tiedoksi", 0);

Meitsi [29.10.2003 22:54:04]

#

gitos!

millerii [31.10.2003 07:52:44]

#

Onkohan sellanen mahdollista, että kun WINDOWS sammuu niin se ohjelma tallentaa tiedot vasta sitte jonnekki? Eli jos ohjelman sammuttaa, mutta windows on vielä päällä niin se ei rekisteröi niitä tietoja.

Meitsi [03.11.2003 22:33:59]

#

mulla antaa tämän (kerkesin kokeilla vasta nyt): 19 uptimecomp.cpp
implicit declaration of function `int sprintf(...)'
Koodi:

#include <windows.h>

char tieto[100];
int main(void) {
    long koa;
    int paivat, tunnit, minuutit, sekunnit;

    koa = GetTickCount();
    koa = koa / 1000;

    paivat = koa / 86400;
    koa = koa - paivat * 86400;
    tunnit = koa / 3600;
    koa = koa - tunnit * 3600;
    minuutit = koa / 60;
    koa = koa - minuutit * 60;
    sekunnit = koa;

    sprintf(tieto, "Järjestelmä on ollut käynnissä %i päivää, %i tuntia, %i minuuttia ja %i sekuntia.", paivat, tunnit, minuutit, sekunnit);
    MessageBox(0, tieto, "Tiedoksi", 0);
}

Aku2 [04.11.2003 12:17:56]

#

lainaus:

Käynnissäoloaika millisekunteina selviää helposti WinApin GetTickCount-funktion avulla. Enemmän koodia tarvitaan sitten siihen, että millisekunnit muutetaan käyttäjälle järkevämpään muotoon. Tämä onnistuu, kun tiedetään että päivässä on 86400, tunnissa 3600 ja minuutissa 60 sekuntia.

Private Declare Function GetTickCount Lib "kernel32" () As Long

Private Sub Form_Click()
    Dim koa As Long
    Dim paivat As Integer, tunnit As Integer
    Dim minuutit As Integer, sekunnit As Integer

    koa = GetTickCount
    koa = koa / 1000

    paivat = koa \ 86400
    koa = koa - paivat * 86400
    tunnit = koa \ 3600
    koa = koa - tunnit * 3600
    minuutit = koa \ 60
    koa = koa - minuutit * 60
    sekunnit = koa

    MsgBox "Järjestelmä on ollut käynnissä " & _
           paivat & " päivää, " & _
           tunnit & " tuntia, " & _
           minuutit & " minuuttia ja " & _
           sekunnit & " sekuntia."
End Sub

Mikäs tuossa mättää, kun yritän tuota ajaa, niin antaa buffer overfloun (error 6)
rivi: koa = koa - tunnit * 3600

MSDN:n mukaan koitin muuttaa tuon toisen koa muuttujan clng(koa), mutta ei apua :(
Debugissa tulee jokaisen muuttujaan kyllä luku. Onkohan sen Longille liian suuri? koa = 78000

Aku2 [04.11.2003 19:56:25]

#

Ongelma ratkesi.
Koneessani oli joku häikkä ja kun se korjaantui, niin toimi ongelmitta, kuten myös tuo toisen viestini freediskspace hommakin.

Aku2 [25.11.2003 22:51:42]

#

Ei näyttänyt ratkeavankaan.
Jostain kumman syystä kun päiviä alkaa kerääntymään, tulee ohjelman käynnistyessä virheilmoitus:

Run-time error '6':
Overflow

Onko kenelläkään vinkkiä kuinka tuon voisi ohittaa?

tnb [25.11.2003 23:01:59]

#

Kannattaisi alustaa kaikki Long tyyppiseksi koska integer on vain 16000 ja risat pitkä.

Aku2 [26.11.2003 10:13:40]

#

jeps. luulin jo kokeilevani sitäkin, mutta nyt uudestaan kokeiltuani toimii longilla ilman virheilmoituksia.

Kiitokset avusta.


Sivun alkuun

Vastaus

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

Tietoa sivustosta