Долго-долго гуглил, читал, медитировал (
) и понял, что мне вовсе не нужен параллельный поток. А зачем, ведь есть такой замечательный инструмент, как таймер, который сразу и одним махом решает все проблемы... В общем, а вот что меня так вдохновило:
http://forums.wxwidgets.org/viewtopic.php?f=1&t=16861
http://docs.wxwidgets.org/stable/wx_wxt ... timerevent
http://forums.realcoding.net/index.php?showtopic=22992
"По подобию и образу" ваших примеров переделал свой пример... Но не все так безоблачно — по событию таймера нет доступа к фрейму ( опять ) ( я там строчку с фреймом закомментировал ). Предполагаю, что проблема кроется в том, что событие источником события есть класс таймера... Собсно, вот... Не работает... Подскажите, пожалуйста...
*решил использовать отказаться от использования глобального указателя, так как уже нет смысла в его использовании...
.cpp:
Code: Select all
#include <wx/wx.h>
#include <wx/timer.h>
#include "msc.h"
BEGIN_EVENT_TABLE( MSCFrame, wxFrame )
EVT_TIMER( TIMER_ID, MSCFrame::OnTimer )
EVT_MENU( Menu_File_Quit, MSCFrame::OnQuit )
EVT_MENU( Menu_File_About, MSCFrame::OnAbout )
EVT_MENU( Menu_File_Test, MSCFrame::OnTest )
END_EVENT_TABLE()
IMPLEMENT_APP(MSCapp)
bool MSCapp::OnInit(){
MSCFrame *frame = new MSCFrame( wxT( "MySERVER Client ( v 0.1 )" ), wxPoint(50, 50), wxSize(500, 300));
frame->Show(true);
SetTopWindow(frame);
return true;
};
MSCFrame::MSCFrame( const wxString& title, const wxPoint& pos, const wxSize& size )
: wxFrame((wxFrame *)NULL, -1, title, pos, size), m_timer(this, TIMER_ID){
wxMenu *menuFile = new wxMenu;
menuFile->Append( Menu_File_About, wxT( "&About..." ) );
menuFile->AppendSeparator();
menuFile->Append( Menu_File_Quit, wxT( "E&xit" ) );
menuFile->AppendSeparator();
menuFile->Append( Menu_File_Test, wxT( "Te&st" ) );
wxMenuBar *menuBar = new wxMenuBar;
menuBar->Append( menuFile, wxT( "&File" ) );
SetMenuBar( menuBar );
CreateStatusBar();
SetStatusText( wxT( "Welcome to Kdevelop wxWidgets app!" ) );
m_timer.Start(10000);
};
//Командный процессор
void core(int com, MSCFrame *frame){
if ( com == 0 ){
// wxSleep(10);
frame->SetStatusText(wxT("Test"));
// wxMessageBox( wxT( "This is a wxWidgets Hello world sample" ), wxT( "About Hello World" ), wxOK );
};
};
void MSCFrame::OnQuit( wxCommandEvent& WXUNUSED( event ) ){
Close(true);
};
void MSCFrame::OnAbout( wxCommandEvent& WXUNUSED( event ) ){
wxMessageBox( wxT( "This is a wxWidgets Hello world sample" ),
wxT( "About Hello World" ), wxOK | wxICON_INFORMATION, this );
};
void MSCFrame::OnTest( wxCommandEvent& WXUNUSED( event ) ){
core(0, this);
};
void MSCFrame::OnTimer( wxTimerEvent& event ){
wxMessageBox( wxT( "This is a wxWidgets Hello world sample" ),
wxT( "Сообщение от таймера" ), wxOK | wxICON_INFORMATION, this );
// frame->SetStatusText(wxT("Test"));
};
.h
Code: Select all
#ifndef _MSC_H_
#define _MSC_H_
#include <wx/wx.h>
#include <wx/timer.h>
/**
* @short Application Main Window
* @author Gladun Alexander <[email protected]>
* @version 0.1
*/
class MSCapp : public wxApp{
public:
virtual bool OnInit();
};
class MSCFrame : public wxFrame{
public:
MSCFrame( const wxString& title, const wxPoint& pos, const wxSize& size );
void OnQuit( wxCommandEvent& event );
void OnAbout( wxCommandEvent& event );
void OnTest( wxCommandEvent& event );
void OnTimer(wxTimerEvent& event);
private:
DECLARE_EVENT_TABLE()
wxTimer m_timer;
};
enum{
Menu_File_Quit = 100,
Menu_File_About = 101,
Menu_File_Test = 102,
TIMER_ID = 1000
};
#endif // _MSC_H_
OS: Slackware 12.2, IDE: KDevelop, xwWidgets version: 2.8.10, Compiler: GCC 4.2.4;
OS: Windows XP HE SP2 ( orig ), IDE: Code::Blocks 10.05, wxWidgets version: 2.8.12, Compiler: GCC 4.