Auto Funktionsaufruf (Intervall)



  • //über der initdialog
    void CALLBACK EXPORT OnInstatus1(
    HWND hWnd, // handle of CWnd that called SetTimer
    UINT nMsg, // WM_TIMER
    UINT nIDEvent // timer identification
    DWORD dwTime // system time
    )
    {}

    //in der initdialog
    SetTimer(WM_USER+1,1000,OnInstatus1);



  • Ich bekom die Kriese.

    Erstmal Danke. Es klappt.

    Mein Problem ist nur , das ichdamit nichts anfangen kann
    ------------
    void CALLBACK EXPORT OnInstatus1(
    HWND hWnd, // handle of CWnd that called SetTimer
    UINT nMsg, // WM_TIMER
    UINT nIDEvent // timer identification
    DWORD dwTime // system time
    ------------

    Habe es auch nicht eingebaut, aber es klappt.

    Was mir jetzt noch wichtig ist, ist die Bedeutung von WM_USER+1.

    DANKE schon vorab und sür die andere Beantwortung.



  • "Mein Problem ist nur , das ichdamit nichts anfangen kann"<- was willst du denn genau wissen?

    The WM_USER constant is used by applications to help define private messages, usually of the form WM_USER+X, where X is an integer value.

    die zahlen vor wm_user sind von windows reserviert
    d.h. du solltest nich nachrichten mit id 20 verschicken
    lieber mit wm_user+20



  • OK. WM_USER hab ich geschnallt.

    Was ich sonst nicht verstehe ist eher allgemeiner Natur.

    z.B.

    Da steht (MSDN)
    SetTimer(
    ...
    HWND hWnd, // handle of window for timer messages
    ...
    );

    Kann ich damit nichts anfangen.
    Weiß nichtmal was ein "handle" ist 🙄



  • bzgl. handle
    stell dir einfach vor du hast 5 fenster und willst mit einem davon etwas machen
    dann brauchst du ne variable mit der du die 5 auseinanderhalten kannst
    dafür gibts handles die du bei der erstellung eines fensters bekommst

    in der settimer funktion gibts du mit dem handle an, an welches deiner 5 fenster die timernachrichten geschickt werden sollen



  • Ohh.
    Einfacher als ich dacht.
    Jetzt verstehe ich zumindest das.

    Ich glaub ich sollte mir mal jemanden zur seite nehmen, der mir erklärt, wie die MSDN zu verstehen ist. Dann fällt mir sicher einiges leichter.

    DANK dir und BYE



  • noch zwei anmerkungen

    1.wenn du mit mfc arbeitest, z.b. mit dialogen bekommst du das handle am einfachsten mit this->m_hWnd
    2.schau in der mfc nich nach den winapi funktionen z.b. SetTimer(...
    sondern nach den mfc funktionen CWnd::SetTimer(...



  • //in der initdialog
    SetTimer(WM_USER+1,1000,OnInstatus1);

    wie wärs wenn du dir die Beschreibung von SetTimer in der MSDN genauer durchliest? WM_USER hat hier überhaupt nichts zu suchen.



  • und warum?
    nur weil ne funktion eingetragen wurde?



  • Sovok schrieb:

    und warum?
    nur weil ne funktion eingetragen wurde?

    warum steht in der MSDN und die Beschreibung zu TimerProc Callback-Funktion solltest du dir auch genauer durchlesen, denn für seine Zwecke ist diese absolut unnötig.



  • obs nötig oder unnötig is spielt keine rolle
    er wollte vorallem wissen wies geht und warum

    die standardvariante mit OnTimer steht ja eh in seinem tutorial



  • Sovok schrieb:

    obs nötig oder unnötig is spielt keine rolle [...]

    Ah ja...



  • Shlo schrieb:

    Sovok schrieb:

    obs nötig oder unnötig is spielt keine rolle [...]

    Ah ja...

    bezogen auf den kenntnisstand des fragenden
    ihm isses nur wichtig dasses funzt, nich obs optimal is oder er von einer ecke der doku zur nächsten geschickt wird



  • Ich wollte hier keinen Streit auslösen!
    Danke nochmal. Hat alles wunderbar hingehauen.

    Jetzt ist diese Funktion aber wieder hinfällig, denn die Funktion die jetzt im Timer läuft, soll permanent laufen. Also ein THREAD. Kennt ihr euch damit aus?

    Habe dafür schon einen Frage-Thread geschrieben. Müsste weiter unten stehen. Schreibt da oder hier. Ist egal.

    PS
    In der MSDN ist ein eigentlich gutes Beispiel, aber aus irgendeinen Grund läuft es nicht.



  • eigentlich brauchst du erstrmal nur createthread(), closehandle() und ne fuktion in der der thread läuft



  • Hast du dir mal meine anderen Frage-Thread angesehen?

    Da ist leider nichts mit "nur CreateThread()".
    Und wenn es so einfach ist, könntest du nicht den Code dafür in den anderen Thread schreiben?



  • Hi

    Das mit den Threads ist echt ziemlich einfach:

    UINT ThreadFunktion(LPVOID pParam)
    {
      CDeinDialog* pDialog = (CDeinDialog*) pParam;
      for(int i=1; i<=10; i++)
      {
        CString strTemp;
        strTemp.Format("Schleife %d", i);
        pDialog->GetDlgItemText(IDC_SHOWSTATUS, strTemp);
        Sleep(500); // eine halbe Sekunde warten
      }
    }
    
    CDeinDialog::OnButton1()
    {
      AfxBeginThread(ThreadFunktion, this);
    }
    

    Code ist selbsterklärend (Ein Statusfeld zählt von i bis 10)

    Grüße Rapha



  • habs ihm schon in den anderen thread gepostet
    jetzt hat er glaub 4 varianten zur auswahl *g*


Anmelden zum Antworten