while schleife frage
-
Hallo
Kann es sen, das du einfach Application->ProcessMessages() als Ersatz für deine komplette Message-Behandlung sucht?
bis bald
akari
-
TranslateAccelerator
The TranslateAccelerator function processes accelerator keys for menu commands.
-
Arbeitest du mit VCL? Oder ist das ein reines WinAPI-Programm?
-
@akari: weiß ich nicht
, da ich mich nicht soo gut mit c++ auskenn, ich brauch das nur grad für meine facharbeit. wie müsste ich das denn mit ProcessMessages machen, wenn ich, wie ich das jetzt verstehe meinen code damit ersetzen könnte, und was wäre der Unetrschied?@christian211: hmm, das klingt ja ganz gut, schreib ich das einfach irgendwo rein ist ist da mehr nötig?
@junix: tja, das kann ich dir leider auch nicht sagen
, nur soviel: ich schreib mit dem borland c++ builder 6, vielleicht sagt das ja schon wasnaja, danke schonmal für eure mühe

-
ok, also den shortcut erkennt er jetzt, allerdings stoppt er immer noch wenn ich ins menü geh, ideen?
-
Havoc schrieb:
@junix: tja, das kann ich dir leider auch nicht sagen
, nur soviel: ich schreib mit dem borland c++ builder 6, vielleicht sagt das ja schon wasNaja, nicht wirklich. Auch nicht jeder der mit MSVC arbeitet benutzt die MFC (o;
Benutzt du irgendwelche Objekte die T-Irgendwas heissen?
-
@junix: ja, tu ich
-
Und wie kamst du zu obigem Code?
-
anderes forum

jetzt isser aber so:
while (stop!=1)
{
Application->ProcessMessages();
rechne();
}
-
Du könntest deinen rechne()-Prozess auch in einen Thread auslagern. Siehe dazu Hilfe zu TThread.
-
hmm, ja, das hab ich auch schon aufgeschnappt, allerdings hab ich von threads leider gar keine ahnung, und die borland hilfe versteh ich dazu leider nicht wirklich... die meintest du doch oder?
kann mir das vielleicht jemand konkret auf mein problem bezogen sagen wie das geht?
-
Gerade zu Threads ist die Hilfe sehr ausführlich
Über Datei -> Neu-> Weitere eine Thread Unit mit in das Projekt aufnehmen. Den Code den der Thread erledigen soll im OnExecute reinsetzen.
Dabei folgende Struktur nutzen:
try { while(!Terminated) { //hier dein Code } catch(...) { ....... }Thread starten und stoppen steht in der Hilfe zu TThread
-
Vielleicht hilft das ja
http://bcb-tutorial.c-plusplus.net/Thread/index.html
http://fatman98.fa.funpic.de/builder_threads.phpEditiert

-
D:\Programm...
kann nicht helfen
-
Jetzt Ok?
-
ich werds gleich mal ausprobieren

-
So, ich hab das jetzt mal ausprobiert, und es funktioniert nicht.

fragen:
1. muss ich irgendwo einstellen, dass ich threads überhaupt nutzen kann, bei projekt->optionen vielleicht, ich dachte ich hab das irgendwo mal gelesen
2. er startet mir meinen thread nicht, beziehungsweise ich kann gar nicht kompilieren. ich hab zum starten folgenden code:
void __fastcall TSonnenSystem::Berechnungstarten1Click(TObject *Sender) { new TMyThread(false); }und zum beenden:
void __fastcall TSonnenSystem::StopIt1Click(TObject *Sender) { TMyThread->Terminate(); }Beide male sagt er mir, ein ; fehlt, Typname erwartet, und beim zweiten auch undefiniertes Symbol TMyThread (mein Thread heißt schon so
)3. kann ich aus dem thread heraus eine funktion aus meiner unit1 aufrufen?
ich hab mir das so gedacht:void __fastcall TMyThread::Execute() { while (!Terminated) TSonnenSystem->rechne(); }4. ich hab außerdem noch außer meiner unit1 und jetzt durch den thread unit2 eine weitere name.cpp mit folgendem code, könnte das ein problem sein?
#include <vcl.h> #pragma hdrstop //--------------------------------------------------------------------------- USEFORM("Unit1.cpp", SonnenSystem); //--------------------------------------------------------------------------- WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); Application->Title = "Titel"; Application->CreateForm(__classid(TSonnenSystem), &SonnenSystem); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } catch (...) { try { throw Exception(""); } catch (Exception &exception) { Application->ShowException(&exception); } } return 0; }lädt der mir hier meinen thread wohl gar nicht? was müsste ich denn reinschreiben, dass ers tut? oder muss ich den bei meiner unit1 irgendwo initialisieren?
hmm, das wars erstmal, danke schonmal an alle!
-
Hättest nach dem 3. mal Bearbeiten ruhig auch die Code-Tags verwenden können.
1.) Du solltest schon eine komplette Instanz deines Threads erstellen und die einem Zeiger zuweisen. Dann kannst du über den auch Terminate() aufrufen.
2.) TSonnenSystem ist doch der Name der Klasse und nicht der Instanz, oder?
-
TSonnenSystem ist wohl das, was standardmäßig TForm1 ist.
wie geht denn das mit der instanz und dem zeiger? sorry, aber blick leider echt nicht durch...
-
Hallo,
Eine Instanz von TMyThread erzeugt man so
TMyThread *mythread = new TMyThread(false);Vielleicht solltest du dir noch ein paar Grundlagen zu Typen, Zeigern sowie Klassen durchlesen. Oben auf der Forumseite ist ein Link zu entsprechenden Tutorials.