wxTimer
-
#include <wx/wx.h> #include <wx/file.h> #include <wx/thread.h> #include <wx/timer.h> #ifdef _WIN32 #include "Socket_win.h" #else #include "Socket_linux.h" #endif using namespace Network; std::string IPAddress = "192.168.0.34"; unsigned short port = 80; struct FileInfo { char name[256]; unsigned int size; }; std::string fileName; std::string fileTitle; std::stringstream fileSize; #define TIMER_ID 0 void createDebugConsole() { AllocConsole(); freopen("CONOUT$", "w", stdout); freopen("CONOUT$", "w", stderr); freopen("CONIN$", "r", stdin); } class startWinSockConnection : public wxThread { public: void Initialize(wxDialog* pthis, wxStaticText* pStaticTextFileName, wxStaticText* pStaticTextFileSize, wxGauge* pGaugeFileTransferProgress, wxStaticText* pStaticTextFileTransferSpeed) { /* Creates a new thread. The thread object is created in the suspended state, you should call Run to start running it. Return value One of: wxTHREAD_NO_ERROR There was no error. wxTHREAD_NO_RESOURCE There were insufficient resources to create a new thread. wxTHREAD_RUNNING The thread is already running. */ /*m_timer = (wxTimer *)NULL; static const int INTERVAL = 1000; m_timer = new wxTimer(this, TIMER_ID); m_timer->Start(INTERVAL);*/ pGaugeFileTransferProgress_ = pGaugeFileTransferProgress; pthis_ = pthis; pStaticTextFileName_ = pStaticTextFileName; pStaticTextFileSize_ = pStaticTextFileSize; pStaticTextFileTransferSpeed_ = pStaticTextFileTransferSpeed; m_timer(pthis_, TIMER_ID); m_timer.Start(1000); // 1 second interval Create(); //oder Create(); Run(); } private: wxStaticText* pStaticTextFileName_; wxStaticText* pStaticTextFileSize_; wxGauge* pGaugeFileTransferProgress_; wxStaticText* pStaticTextFileTransferSpeed_; wxDialog* pthis_; virtual ExitCode Entry(); void OnTimer(wxTimerEvent& event); //wxTimer *m_timer; wxTimer m_timer; }; BEGIN_EVENT_TABLE(startWinSockConnection, wxThread) EVT_TIMER(TIMER_ID, startWinSockConnection::OnTimer) END_EVENT_TABLE() void startWinSockConnection::OnTimer(wxTimerEvent& event) { // do whatever you want to do every second here } ------ Neues Erstellen gestartet: Projekt: Client_GUI, Konfiguration: Debug Win32 ------ Die Zwischen- und Ausgabedateien für das Projekt "Client_GUI" mit der Konfiguration "Debug|Win32" werden gelöscht. Kompilieren... Client.cpp c:\Filetransfer\Client_GUI\Client.cpp(86) : error C2039: 'GetEventTable' : Ist kein Element von 'startWinSockConnection' c:\Filetransfer\Client_GUI\Client.cpp(41) : Siehe Deklaration von 'startWinSockConnection' c:\Filetransfer\Client_GUI\Client.cpp(86) : error C2270: "GetEventTable" : Modifizierer für Funktionen, die keine Memberfunktionen sind, nicht zulässig c:\Filetransfer\Client_GUI\Client.cpp(86) : error C2039: 'sm_eventTable' : Ist kein Element von 'startWinSockConnection' c:\Filetransfer\Client_GUI\Client.cpp(41) : Siehe Deklaration von 'startWinSockConnection' c:\Filetransfer\Client_GUI\Client.cpp(86) : error C2065: 'sm_eventTable' : nichtdeklarierter Bezeichner c:\Filetransfer\Client_GUI\Client.cpp(86) : error C2039: 'sm_eventTable' : Ist kein Element von 'startWinSockConnection' c:\Filetransfer\Client_GUI\Client.cpp(41) : Siehe Deklaration von 'startWinSockConnection' c:\Filetransfer\Client_GUI\Client.cpp(86) : error C2373: 'sm_eventTable' : Neudefinition; unterschiedliche Modifizierer c:\Filetransfer\Client_GUI\Client.cpp(86) : error C2039: 'sm_eventTable' : Ist kein Element von 'wxThread' c:\wxWindows 2.4.2\include\wx\thread.h(423) : Siehe Deklaration von 'wxThread' c:\Filetransfer\Client_GUI\Client.cpp(86) : error C2440: 'Initialisierung' : ' *__w64 ' kann nicht in 'const wxEventTable *' konvertiert werden Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat c:\Filetransfer\Client_GUI\Client.cpp(86) : error C2039: 'sm_eventTableEntries' : Ist kein Element von 'startWinSockConnection' c:\Filetransfer\Client_GUI\Client.cpp(41) : Siehe Deklaration von 'startWinSockConnection' c:\Filetransfer\Client_GUI\Client.cpp(86) : error C2065: 'sm_eventTableEntries' : nichtdeklarierter Bezeichner c:\Filetransfer\Client_GUI\Client.cpp(86) : error C2109: Index erfordert ein Array oder einen Zeigertyp c:\Filetransfer\Client_GUI\Client.cpp(86) : error C2039: 'sm_eventTableEntries' : Ist kein Element von 'startWinSockConnection' c:\Filetransfer\Client_GUI\Client.cpp(41) : Siehe Deklaration von 'startWinSockConnection' c:\Filetransfer\Client_GUI\Client.cpp(86) : error C2040: 'sm_eventTableEntries' : 'const wxEventTableEntry []' unterscheidet sich von ''unknown-type'' in Bezug auf die Anzahl vorgenommener Dereferenzierungen c:\Filetransfer\Client_GUI\Client.cpp(87) : error C2059: Syntaxfehler : '=' c:\Filetransfer\Client_GUI\Client.cpp(88) : error C2143: Syntaxfehler : Es fehlt ';' vor '}' c:\Filetransfer\Client_GUI\Client.cpp(88) : error C2059: Syntaxfehler : '}' c:\Filetransfer\Client_GUI\Client.cpp(120) : fatal error C1903: Weiterverarbeitung nach vorherigem Fehler nicht möglich; Kompilierung wird abgebrochen. Das Build-Protokoll wurde unter "file://c:\Filetransfer\Client_GUI\Debug\BuildLog.htm" gespeichert. Client_GUI - 18 Fehler, 9 Warnung(en) ---------------------- Fertig ---------------------- Neues Erstellen: 0 erfolgreich, 1 fehlgeschlagen, 0 übersprungen
hi leute! ich will einen timer verwenden unter wxwidgets....
hab da paar infos gefunden:
http://www.wxwindows.org/manuals/2.4.2/wx392.htm
aber was ist das BEGIN_EVENT_TABLE? das funktioniert nicht....das mit Timer_ID will a net so;-(((vielleicht weiß jemand um rat!?
cu
-
da stimmen errors mit line überein:
http://www.rafb.net/paste/results/REghTs16.htmlcu
-
das ist nicht der ganze code von meinem prog...nur der thread...threadaufruf klappt soweit alles...
wie ihr da seht hab ich einen thread....
wenn der thread gestartet wird soll der timer initialisiert werden und eine methode soll alle 1 sec aufgerufen werden...
in dieser methode will ich den transferspeed berrechnen...
-
der Timer den du versuchst zu verwenden, erzeugt ein Window-Event (unter Windows dürfte das eine WM_TIMER Message sein).
Daher die Event-Table. wxThread kann mit Window-Events nichts anfangen.
Deine Fehlermeldungen kommen daher, weil du versuchst Event-Handler an wxThread zu hängen (bzw. an deine davon abgeleitete Klasse). Event-Handler kannst du aber nur an Klassen hängen, die von... Ähm... wxEventHandler? Abgeleitet sind.
-
ja supa! wie verwende ich dann einen timer in meinem thread dA?
hmm......cu
-
Gar nicht. Aus der Doku:
note that timer can only be used from the main thread currently.