C++ Zeit mit Boolschen return Wert

Begonnen von siL3x`, 23. Juni 2006, 09:37:00 Uhr

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

siL3x`

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 
-- C2D 6420@Noctua NHU12F(8db/A)
-- ASUS P5W DH Deluxe
-- GEIL Ultra 4x1024MB DDR2
-- Connect3D X1900XTX@XeroX 19" XAi
-- LianLi PC70@Dämmung@6x 80mm Coolink (9db/A)
-- Raptor 360@Raid 0
-- 3xSamsung Spinpoint 250S-ATAII@Raid5

Gudi

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... ;)

siL3x`

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
-- C2D 6420@Noctua NHU12F(8db/A)
-- ASUS P5W DH Deluxe
-- GEIL Ultra 4x1024MB DDR2
-- Connect3D X1900XTX@XeroX 19" XAi
-- LianLi PC70@Dämmung@6x 80mm Coolink (9db/A)
-- Raptor 360@Raid 0
-- 3xSamsung Spinpoint 250S-ATAII@Raid5

siL3x`

ä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
-- C2D 6420@Noctua NHU12F(8db/A)
-- ASUS P5W DH Deluxe
-- GEIL Ultra 4x1024MB DDR2
-- Connect3D X1900XTX@XeroX 19" XAi
-- LianLi PC70@Dämmung@6x 80mm Coolink (9db/A)
-- Raptor 360@Raid 0
-- 3xSamsung Spinpoint 250S-ATAII@Raid5

Gudi

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...



siL3x`

26. Juni 2006, 22:41:42 Uhr #5 Letzte Bearbeitung: 26. Juni 2006, 22:47:57 Uhr von siL3x`
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.
-- C2D 6420@Noctua NHU12F(8db/A)
-- ASUS P5W DH Deluxe
-- GEIL Ultra 4x1024MB DDR2
-- Connect3D X1900XTX@XeroX 19" XAi
-- LianLi PC70@Dämmung@6x 80mm Coolink (9db/A)
-- Raptor 360@Raid 0
-- 3xSamsung Spinpoint 250S-ATAII@Raid5

Gudi

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) ..."


siL3x`

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 
-- C2D 6420@Noctua NHU12F(8db/A)
-- ASUS P5W DH Deluxe
-- GEIL Ultra 4x1024MB DDR2
-- Connect3D X1900XTX@XeroX 19" XAi
-- LianLi PC70@Dämmung@6x 80mm Coolink (9db/A)
-- Raptor 360@Raid 0
-- 3xSamsung Spinpoint 250S-ATAII@Raid5

Gudi

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());
}