Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Timer Problem

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
12.12.2003, 10:57 Uhr
~TAFA
Gast


Halli hallo ,

also ich progge gerade ein klasse aus den ich ein timer starten will
wenn ich den timer setze mit SetTimer(1,1000,NULL) kriege ich immer ein assert in datei

Afxwin2.inl:

C++:

_AFXWIN_INLINE UINT CWnd::SetTimer(UINT nIDEvent, UINT nElapse,
        void (CALLBACK* lpfnTimer)(HWND, UINT, UINT, DWORD))
ASSERT(::IsWindow(m_hWnd)); return ::SetTimer(m_hWnd, nIDEvent, nElapse,
        (TIMERPROC)lpfnTimer); }



C++:
in Myarchiv.h

class MyArchiv  : CWnd
{
public:
  // message handlers
  afx_msg void OnTimer(UINT nIDEvent);
  DECLARE_MESSAGE_MAP()
}

in MyArchiv.cpp
// MyArchiv message handlers
BEGIN_MESSAGE_MAP(MyArchiv, CWnd)
   ON_WM_TIMER()
END_MESSAGE_MAP()

void MyArchiv::OnTimer(UINT nIDEvent)
{
  if(nIDEvent==1)
  {
    //KillTimer(1);
    AfxMessageBox("TIMER_ID");
  }
  CWnd::OnTimer(nIDEvent);
}


kann mir jemand sagen was ich da falsch mache
für ideen wäre ich dankbar
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.12.2003, 12:37 Uhr
ao

(Operator)


Wo ist denn der Aufruf von SetTimer?

Die Assertion zeigt an, dass die Instanz von CWnd, die aufgerufen wird, kein Window-Handle hat. Ist sie noch nicht konstruiert?

Die NULL im 3. Parameter von SetTimer dürfte auch noch problematisch werden, aber erst dann, wenn du durch SetTimer durchkommst; hier gehört die Timer-Prozedur rein.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.12.2003, 13:06 Uhr
~TAFA
Gast


der Aufruf von SetTimer geschieht zumbeispiel hier :

C++:
bool MyArchiv::Datei(DWORD Art,UINT Alterung,UINT Intervall)
{
  SetTimer( 1,       // ID
                 1000, // 1 sek
                 NULL  // wie muss ich den initialisieren bzw. konstruieren
               );
  // in einigen beispielen habe ich gesehen das es Funktioniert
}



also ich hab das so mal versucht klappt bis auf KillTimer:

C++:
//MyArchiv.h
static VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg,
                                                UINT uIDEvent, DWORD dwTime);

//MyArchiv.cpp
VOID CALLBACK MyArchiv::TimerProc(HWND hwnd, UINT uMsg,UINT uIDEvent, DWORD dwTime)
{
    AfxMessageBox("test");
    if(uIDEvent==1)    {
        ::KillTimer(NULL,1);
        AfxMessageBox("KILLL");
    }
}

// Aufruf
::SetTimer(NULL,1,1000,Timerproc);

allerdings ist UINT uIDEvent !=1 deswegen klappt der KillTimer net
hast du ne idee wie ich an den richtigen  UINT uIDEvent  komme.

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.12.2003, 18:42 Uhr
mmc20
puss in boots


hi,

also ich machs so:

C++:
private:
    UINT m_Timer1;
...
// Aufruf
    m_Timer1 = SetTimer(ID_TIMER1, 100, NULL);
...
// OnTimer
void CDeinProg::OnTimer(UINT nIDEvent)
{
    switch(nIDEvent)
    {
        case ID_TIMER1:
            KillTimer(ID_TIMER1);
// diverse anweissungen, oder zb,. timer neu setzen...
            m_Timer1 = SetTimer(ID_TIMER2, 250, NULL);
        break;
        case ID_TIMER2: // hier halt was anderes machen
            KillTimer(ID_TIMER2);
// bla bla ... usw.
        break;
    }
    CDialog::OnTimer(nIDEvent);
}



so klappts bei mir.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: