SYSTEMTIME im NeHe - code funzt nicht ....
-
nabend!
ich will nen kleinen kalender programmieren, auf grundlage des NeHe - codes.
natürlich ist dafürSYSTEMTIME zeit; GetSystemTime(&zeit);unerlässlich und funktioniert auch in jedem "normalen" code wunderbar.
da das prog nur am start das datum abfragen soll, trage ich die GetSystemTime - abfrage direkt in die WinMain, noch vor der schleife, ein. (die zeit - variable kommt natürlich ganz oben in den kopf)
folge: das programm minimiert sich wenn ich es starte und spricht nicht mehr an.
wenn ich allerdings die abfrage in die DrawGLScene, also in die ständig ablaufende schleife, schreibe, funktioniert alles wunderbar. warum?!für die NeHe - unerfahrenen hier nochmal die main:
[cpp]
int WINAPI WinMain( HINSTANCE hInstance, // Instance
HINSTANCE hPrevInstance, // Previous Instance
LPSTR lpCmdLine, // Command Line Parameters
int nCmdShow) // Window Show State
{
MSG msg; // Windows Message Structure
BOOL done=FALSE; // Bool Variable To Exit Loop// wenn ich die abfrage hier habe, stürzt das programm ab //
SYSTEMTIME zeit;
GetSystemTime(&zeit);fullscreen=FALSE; // Windowed Mode
// Create Our OpenGL Window
if (!CreateGLWindow("SirNoname`s modified NeHe - code 2",800,600,16,fullscreen))
{
return 0; // Quit If Window Was Not Created
}while(!done) // Loop That Runs While done=FALSE
{
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) // Is There A Message Waiting?
{
if (msg.message==WM_QUIT) // Have We Received A Quit Message?
{
done=TRUE; // If So done=TRUE
}
else // If Not, Deal With Window Messages
{
TranslateMessage(&msg); // Translate The Message
DispatchMessage(&msg); // Dispatch The Message
}
}
else // If There Are No Messages
{
// Draw The Scene. Watch For ESC Key And Quit Messages From DrawGLScene()
if (active) // Program Active?
{
if (keys[VK_ESCAPE]) // Was ESC Pressed?
{
done=TRUE; // ESC Signalled A Quit
}
else // Not Time To Quit, Update Screen
{
DrawGLScene(); // Draw The Scene
SwapBuffers(hDC); // Swap Buffers (Double Buffering)// an dieser Stelle jedoch funktioniert es //
SYSTEMTIME zeit;
GetSystemTime(&zeit);
}
}
}
}// Shutdown
KillGLWindow(); // Kill The Window
return (msg.wParam); // Exit The Program
}
[/cpp]danke für eure hilfe!
-
Das ist aber sehr seltsam

Abstürtzen heißt, du bekommst einen Speicher-Zugriffs-Fehler, oder was genau? Hast du dein Programm mal über den Debugger gestartet?
-
stimm ich dir zu, sehr sehr merkwürdig sogar. ka ob es am rest des codes liegt, halte ich aber für unwahrscheinlich.
abstürzen = unten in der taskleiste wird es zwar angezeigt, aber das fenster an sich öffnet sich nicht. und: das prog braucht auf einmal fast 50 % meiner ressourcen ... und das is viel denn ich hab nen schnellen rechner. ... sieht verdammt nach ner endlosschleife aus ...
-
hi,
koennte es vielleicht sogar ein windows problem sein? die frage ist ab wann es ein richtiger prozess wird? normalerweise wuerde ich sagen wenn das prog gestartet wird, also sobald die winapifunktion aufgerufen wird. vielleicht ist es aber nicht so und du musst erst ein fenster erzeugt haben.
ich habe jedenfalls auch sowas noch nicht gesehen.gruss
msp
-
Wo greifst du auf die "zeit"-Variable zu und was machst du damit ?
-
das Problem liegt defenitiv woanders, bzw. müßte man mal die Funktion "CreateGLWindow" sehen (ist bei GL ja nicht so lang wie bei D3D).
Meine Vermutung ist, das durch den Aufruf der API Funktion, Windows deinem Programm da bereits automatisch Rechenzeit zu ordnet und durch den gefolgten Aufruf von GL unterworfen wird und die sich um die prirorität kloppen, was zur Thread überlast führt und weitere Funktionen nicht folgen.
Es könnte ein Sleep(0) helfen um Windows ne runde warten zu lassen, oder die Initalisierung abarbeiten und dann GetSystemTime() aufrufen, direkt vor Eintritt in die Schleife.