HWE-Forum.de

Internet und Co. => HTML, PHP, XML, JavaScript u. Co. => Thema gestartet von: siL3x` am 23. Juni 2006, 09:37:00 Uhr

Titel: C++ Zeit mit Boolschen return Wert
Beitrag von: siL3x` am 23. Juni 2006, 09:37:00 Uhr
Hallo,

ich hätte mal ne frage, ich versuche ein programm zu schreiben das variable einen befehl ausführen soll.
sprich das wenn ich am anfang des programms eine zeit eingebe (also jetzt speziell auf mein programm bezogen) soll diese zeit in einer variablen gepeichert werden und immer wieder mit der systemzeit verglichen werden, das ganze den mit dem datentyp bool und wenn der rückgabewert 1 ist soll das programm ablaufen. kann mir vllt wer helfen?


greetz 
Titel: Re: C++ Zeit mit Boolschen return Wert
Beitrag von: Gudi am 23. Juni 2006, 22:37:36 Uhr
so richtig ist nich rübergekommen, was du überhaupt willst bzw wo das Problem liegt.

die Uhrzeit holt man sich am besten per gettimeofday (in <sys/time.h>) unter Unix/Linux bzw mit GetSystemTimeAsFileTime unter Windows. Die Sachen, die zurück kommen kannst du entsprechend umrechnen und mit dem eingegebenen (und entsprechend geparstem/umgerechnetem) Datum vergleichen...

Ansonsten gibt man in C++ beim Datentyp "bool" übrigens nicht 1 oder 0 zurück, sondern korrekterweise "true" oder "false"... wir sond doch nicht bei C... ;)
Titel: Re: C++ Zeit mit Boolschen return Wert
Beitrag von: siL3x` am 24. Juni 2006, 14:45:52 Uhr
ja das weiss ich schon, war in hektik da is das alles etwas unter gekommen ;)

aber danke für die hilfe habe es mit Struct SYSTEMTIME tm; gemacht.

danke für die hilfe
Titel: Re: C++ Zeit mit Boolschen return Wert
Beitrag von: siL3x` am 26. Juni 2006, 09:51:06 Uhr
ähm nochmal ne frage. ich muss also wenn ich

SYSTEMTIME tm;
GetLocalTime (&tm);

tm.wHour (müsste ich dies erstmal umrechnen oder wie darf ich das jetzt verstehen?)

mal nen auszug aus meinem quellcode zur besseren verständigung.


#include <iostream.h>
#include <windows.h>
#include <time.h>
#include <dos.h>

using namespace std;

int a,b,c,d;
void main()
{
SYSTEMTIME tm;
GetLocalTime(&tm);
cout<<"\tShutdown der RTL(s) nach Zeitangabe."<<endl<<endl<<endl<<endl;

cout<<"\t----------------------------------";
cout<<"\n\tDie Aktuelle Zeit ist  \xAF "<<tm.wHour<<":"<<tm.wMinute<<" Uhr"<<endl;
cout<<"\n\tDas Aktuelle Datum ist \xAF "<<tm.wDay<<"."<<tm.wMonth<<"."<<tm.wYear<<endl;
cout<<"\t----------------------------------"<<endl<<endl<<endl;

cout << "\tBitte die Stunde des Shutdown eingeben: ";
cin >> a;
cout << "\tBitte die Minute des Shutdown eingeben: ";
cin >> b;
cout << "\n\tDie Zeit wurde festgelegt auf "<<a<<":"<<b<<" Uhr"<<endl<<endl;
c=tm.wHour;
d=tm.wMinute;
while(a==c)
{

  while(b==d)
  {
  cout << "Hello";

  }
};

return 0;
}


ich will eigentlich an der Stelle nur die eingabe (a,b) mit (c,d) vergleichen und das wenn beide werte stimmen soll ebend etwas folgen, der shutdown. aber es klappt nicht. er kann das prog zwar compilen aber wenn die zeit dann kommt passiert nix. ich schätze mal das er nur 1x den wert zuweist zu bsp tm.wHour oder?

greetz
Titel: Re: C++ Zeit mit Boolschen return Wert
Beitrag von: Gudi am 26. Juni 2006, 21:23:30 Uhr
ja, das musst du schon jedes mal neu auslesen.
und bist du dir sicher, das durch "buisy waiting" zu machen? Denn dann schluckt das programm beim "warten" 100% CPU-Zeit...
Ein Sleep(..) solltest du wirklich in Betracht ziehen... ;)

außerdem wird das mit den beiden while-schleifen so nicht klappen.

vielleicht eher so:



SYSTEMTIME tm;
GetLocalTime(&tm);

int shutdownStd = a; // aus der Eingabe
int shutdownMin = b; // aus der Eingabe

while(tm.wHour != shutdownStd || tm.wMinute != shutdownMin) {
    Sleep(10000); // 10 sec schlafen
    GetLocalTime(&tm); // tm aktualisieren
}

cout << "Es ist soweit..." << endl;
//shutdown-code...


Titel: Re: C++ Zeit mit Boolschen return Wert
Beitrag von: siL3x` am 26. Juni 2006, 22:41:42 Uhr
Danke war die Ultimative lösung :) , bin noch neu auf dem Gebiet. Jetzt weiss ich ja an wen ich mich bei probs wenden kann (+).

greetz

edit: es klappt alles wunderbar durch die Sleeptime is die CPU auslastung = 0, aber woher wusstes du das mit der while? und warum oder? (||) müsste es nicht && sein? weil es müssen doch beide werte zutreffen.
Titel: Re: C++ Zeit mit Boolschen return Wert
Beitrag von: Gudi am 26. Juni 2006, 23:44:00 Uhr
ich arbeite momentan an meiner Diplomarbeit, um mein Informatikstudium abzuschließen... da muß ich doch sowas sehen... ;)

und das "oder" und "und": nach den De Morganschen Gesetzen gilt (für die Aussagen a und b):

!(a && b) == (!a || !b)

also im programm: "solange die Stunden und Minuten nicht gleich sind, warte ab..." -> "while( ! (stundenGleich && minutenGleich) ) ..." -> "while(stundenUngleich || minutenUngleich) ..."

Titel: Re: C++ Zeit mit Boolschen return Wert
Beitrag von: siL3x` am 27. Juni 2006, 07:04:53 Uhr
stimmt, verstehe. nur noch eins.

es soll, wenn die zeit stimmt eine for-schleife abgelaufen werden.


for(c,d;c<15 && d<30;c++,d++)      // c = Subnetz , d = Ip`s
{
  system("net use \\141.44.'c'.'d' /user:studadmin pw");
  system("shutdown -a -f -m \\141.44.'c'.'d' -t 60");
}


problem ist nun das ich mit den "system" befehlen nicht ganz klar komme und die c,d zeichen variable bleiben müssen.  weiss nun net ob das in hochkommas geschrieben wird oder in anführungszeichen, oder ob das überhaupt so möglich ist? weil nen string einsetzen kann ich ja nicht, es sei denn ich lasse diesen jedes mal neu erstellen, aber da weiss ich nich so recht wie man den bei dem durchlauf verändert.

greetz 
Titel: Re: C++ Zeit mit Boolschen return Wert
Beitrag von: Gudi am 27. Juni 2006, 08:43:23 Uhr
versuche es mal mit ostrstream:


#include <strstream>

for(...) {
    ostrstream oss1;
    oss1 << "net use \\141.44." << c << "." << d << " /user: ...";
    cout << "führe folgenden Befehl aus: " << oss1.str();
    system(oss1.str());
}