Z
Ja der Gibt ein Wert aus ,Das Problem liegt warscheinlich in dem Aufruf der Funktion "ConnectionTimeout"
Ich habe das ganze Teil mal komplett überarbeitet , es ist jetzt möglich ,mehr als 1 Settimer zu starten (bekommt den wert von Settimer überreicht)
in der Selben Funktion wo er gestartet wird , kann er auch gestoppt werden
bzw von Aussenhalb der Klasse (oder mithilfe einer Klassen Funktion)
- nur innerhalb von "ConnectionTimeout" kann er keinen Timer aufrufen bzw stoppen (bzw in allen Funktionen die von "ConnectionTimeout" gestartet wurden)
hab einiges versucht das hinzubekommen , aber da ich nicht weiß woran das liegt kann ich nicht viel machen
Zur Not kann ich damit Leben , aber ist schon nervig
falls jemand weiß woran das liegt ...
oder eine andere Möglichkeit kennt , Timer in Klassen zu starten und zu beenden
immer her damit
Zermos
FileTranfer.h
#pragma once
class FileTransfer
{
public:
char *x;
FileTransfer(void);
FileTransfer(DWORD dwMilliseconds,UINT_PTR = NULL);
~FileTransfer(void);
UINT_PTR StartConnectionTimer(DWORD dwMilliseconds);
static VOID CALLBACK StaticConnectionTimeout(HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime);
VOID CALLBACK ConnectionTimeout(HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime);
UINT_PTR Timer1;
UINT_PTR Timer2;
UINT_PTR Timer3;
void weiter();
private:
UINT_PTR pTimer;
static void * pObject;
};
FileTransfer.cpp
#include <Windows.h>
#include "FileTransfer.h"
FileTransfer::FileTransfer(void)
{
}
FileTransfer::FileTransfer(DWORD dwMilliseconds,UINT_PTR idEvent)
{
x = "hallo";
Timer1 = StartConnectionTimer(dwMilliseconds);
Timer2 = StartConnectionTimer(300);
// KillTimer(NULL,Timer2); /* Hier kann Timer beendet werden*/
}
FileTransfer::~FileTransfer(void)
{
}
void * FileTransfer::pObject;
UINT_PTR FileTransfer::StartConnectionTimer(DWORD dwMilliseconds) {
UINT_PTR pTimer;
pObject = this; // VERY IMPORTANT, must be initialized before
pTimer = SetTimer(NULL,NULL, dwMilliseconds, &FileTransfer::StaticConnectionTimeout);
return pTimer;
}
VOID CALLBACK FileTransfer::StaticConnectionTimeout(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
FileTransfer *pSomeClass = (FileTransfer*)pObject; // cast the void pointer
pSomeClass->ConnectionTimeout(hwnd, uMsg,idEvent, dwTime); // call non-static function
}
VOID CALLBACK FileTransfer::ConnectionTimeout(HWND hWnd, UINT uMsg, UINT_PTR idEvent,DWORD dwTime) {
if (idEvent == Timer1)
{
MessageBox(0,L"huhu",0,0); // das wird normal abgearbeitet
KillTimer(NULL,Timer1); // Hier klappt es nicht
//blah
}
if (idEvent == Timer2)
Beep(2345,100);
if (idEvent == Timer3)
MessageBox(0,0,0,0);
}