<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Probelme mit Timer]]></title><description><![CDATA[<p>Hallo Hier meine klassen definietion :</p>
<pre><code class="language-cpp">class FileManager
{

public:

	FileManager();
	~FileManager();

	void SearchFile(std::string text);

private:

	// Database Operations
	bool OpenDatabase();
	bool CloseDatabase();
	bool WriteStringToDatbase(std::string sql);
	bool CreateBackUpTable();
	bool UpdateDatabase();

	sError CreateErrorStruct(int code, std::string text);

	// Convert Operations
	std::string ConvertDwordToString( DWORD number);
	std::string ConvertBoolToString( bool value);
	std::string RemoveCharacterFromString(std::string character,std::string StringToRemove);

	// Log File Operations
	void CreateLogFile();

	// File Operations
	void ReadIniFile();
	void ScanFolder(std::string folder);
	void WriteFileInformation(std::string file);

	// Test Funktionn für den Timer
	void CALLBACK TimerFunction(UINT wTimerID, UINT msg, DWORD dwUser, DWORD dw1, DWORD dw2);

	std::vector&lt;sError&gt; vErros;
	std::vector&lt;std::string&gt; vFolders;
	CDatabase db;
	std::string sODBC;
	int iCurentFilesCount;

};
</code></pre>
<p>ich möchte die funktion UpdateDatabase in eimem timer aufrufen. dazu habe ich mir eine TimerFunktion geschrieben.</p>
<pre><code class="language-cpp">// ***********************************************************

void CALLBACK FileManager::TimerFunction(UINT wTimerID, UINT msg, DWORD dwUser, DWORD dw1, DWORD dw2) 
{
	std::cout &lt;&lt; &quot;Timer Function \n&quot;;
//	UpdateDatabase();
}
</code></pre>
<p>Im Konstruktor wird nun ein Timer aufgezogen :</p>
<pre><code class="language-cpp">timeSetEvent(60000,0,TimerFunction,NULL,TIME_PERIODIC);
</code></pre>
<p>Leider erlaubt er mir aber nicht die Update Funktion zu öffnen in der Funktion weil sie nicht static ist. Nun wollte ich diese Funktion als static markieren , das zieht abenr einen Rattenschwanz hineter sich her, da die Updat Funktion auch noch weitere Funktionen aufruft, die natürlich auch nicht static sind. Weiß jemand Rat für das Problem ?</p>
<p>Vielen Dnak</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/248047/probelme-mit-timer</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 07:02:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/248047.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 19 Aug 2009 08:15:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probelme mit Timer on Wed, 19 Aug 2009 08:15:28 GMT]]></title><description><![CDATA[<p>Hallo Hier meine klassen definietion :</p>
<pre><code class="language-cpp">class FileManager
{

public:

	FileManager();
	~FileManager();

	void SearchFile(std::string text);

private:

	// Database Operations
	bool OpenDatabase();
	bool CloseDatabase();
	bool WriteStringToDatbase(std::string sql);
	bool CreateBackUpTable();
	bool UpdateDatabase();

	sError CreateErrorStruct(int code, std::string text);

	// Convert Operations
	std::string ConvertDwordToString( DWORD number);
	std::string ConvertBoolToString( bool value);
	std::string RemoveCharacterFromString(std::string character,std::string StringToRemove);

	// Log File Operations
	void CreateLogFile();

	// File Operations
	void ReadIniFile();
	void ScanFolder(std::string folder);
	void WriteFileInformation(std::string file);

	// Test Funktionn für den Timer
	void CALLBACK TimerFunction(UINT wTimerID, UINT msg, DWORD dwUser, DWORD dw1, DWORD dw2);

	std::vector&lt;sError&gt; vErros;
	std::vector&lt;std::string&gt; vFolders;
	CDatabase db;
	std::string sODBC;
	int iCurentFilesCount;

};
</code></pre>
<p>ich möchte die funktion UpdateDatabase in eimem timer aufrufen. dazu habe ich mir eine TimerFunktion geschrieben.</p>
<pre><code class="language-cpp">// ***********************************************************

void CALLBACK FileManager::TimerFunction(UINT wTimerID, UINT msg, DWORD dwUser, DWORD dw1, DWORD dw2) 
{
	std::cout &lt;&lt; &quot;Timer Function \n&quot;;
//	UpdateDatabase();
}
</code></pre>
<p>Im Konstruktor wird nun ein Timer aufgezogen :</p>
<pre><code class="language-cpp">timeSetEvent(60000,0,TimerFunction,NULL,TIME_PERIODIC);
</code></pre>
<p>Leider erlaubt er mir aber nicht die Update Funktion zu öffnen in der Funktion weil sie nicht static ist. Nun wollte ich diese Funktion als static markieren , das zieht abenr einen Rattenschwanz hineter sich her, da die Updat Funktion auch noch weitere Funktionen aufruft, die natürlich auch nicht static sind. Weiß jemand Rat für das Problem ?</p>
<p>Vielen Dnak</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1763248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1763248</guid><dc:creator><![CDATA[dercooleauswandere]]></dc:creator><pubDate>Wed, 19 Aug 2009 08:15:28 GMT</pubDate></item><item><title><![CDATA[Reply to Probelme mit Timer on Wed, 19 Aug 2009 08:59:36 GMT]]></title><description><![CDATA[<p>Wenn Du aus FileManager ein Singleton machen kannst:</p>
<pre><code>void CALLBACK TimerFunction(UINT wTimerID, UINT msg, DWORD dwUser, DWORD dw1, DWORD dw2)
{
    FileManager::getInstance().UpdateDatabase();
}
</code></pre>
<p>ansonsten sowas in der Art wie:</p>
<pre><code>class Redirector
{
  FileManager * m_fm;
public:
  Redirector() : m_fm(0);
  void set(FileManager * fm) {m_fm = fm;}
  void func() {if (m_fm) m_fm-&gt;UpdateDatabase()};
};

static Redirector s_redirector;

void CALLBACK TimerFunction(UINT wTimerID, UINT msg, DWORD dwUser, DWORD dw1, DWORD dw2)
{
    s_redirector.func();
}
</code></pre>
<p>Nach Instantiierung Deines Filemanager Objektes musst Du dieses natürlich mittels der set() Funktion dem Redirector bekannt machen.</p>
<p>Es gibt aber durchaus noch ein paar Lösungmöglichkeiten (z.B. boost::function).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1763276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1763276</guid><dc:creator><![CDATA[jencas]]></dc:creator><pubDate>Wed, 19 Aug 2009 08:59:36 GMT</pubDate></item><item><title><![CDATA[Reply to Probelme mit Timer on Wed, 19 Aug 2009 10:06:47 GMT]]></title><description><![CDATA[<p>Ich hätte es jetzt so in der Art probiert, wie bei Threads:<br />
Member auf static, dem Timer den this-Zeiger als Parameter und dann in der Memberfunktion über den übergebenen Zeiger die Funktionen der Klasse aufrufen.</p>
<p>Weiß aber nicht ob das so zwingend funktioniert. Im übrigen ist das nicht wirklich Standard C++...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1763315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1763315</guid><dc:creator><![CDATA[lagalopex]]></dc:creator><pubDate>Wed, 19 Aug 2009 10:06:47 GMT</pubDate></item></channel></rss>