Hallo Zusammen,
ich möchte in einer vorhandene Applikation eine Funktion asynchron machen.
meine Applikation soll die Protokolldaten nicht direkt in der DB Speichern, sondern in einer Liste zwischenspeichern und dann einen Thread starten ,der parallel läuft und die Daten aus der Liste in der DB speichern.
Thread-Klasse
// #ifndef \_\_CProtToDBThread\_\_
// #define \_\_CProtToDBThread\_\_
#include
#include "cProtList.h"
#include "..\ProtMan\cProtocolObjManager.h"
//class cProtocolObjManager;
#ifndef \_\_CProtToDBThread\_\_
#define \_\_CProtToDBThread\_\_
static CProtList\* pProtokolList;
class CProtToDBThread: public CWinThread
{
public:
//DECLARE\_DYNCREATE(CProtToDBThread)
CProtToDBThread(cObjFactory\* pObjFactory);
static UINT ProtToDbThread( LPVOID pParam );
virtual ~CProtToDBThread();
HANDLE GetHandle(void);
void Beenden(void);
void Resume(void);
//void testThreading(int number);
//int Run();
//BOOL InitInstance();
protected:
//BOOL OnIdle(long lcount);
//DECLARE\_MESSAGE\_MAP();
//afx\_msg void HandleThreadMessage(WPARAM wParam, LPARAM lParam);
//virtual int ExitInstance();
public:
volatile BOOL m\_bBeenden;
private:
static cObjFactory\* m\_pObjFactory;
cParamDB\* pParamDb;
};
// END CLASS DEFINITION CProtToDBThread
#endif // \_\_CProtToDBThread
#include "stdafx.h"
#include "cProtToDBThread.h"
#include "..\TimerObjBuilder\cParamDB.h"
//#include "..\ProtMan\cProtocolObjManager.h"
CProtToDBThread::CProtToDBThread(cObjFactory\* pObjFactory)
{
m\_hThread = (HANDLE)AfxBeginThread(ProtToDbThread, pObjFactory, THREAD\_PRIORITY\_ABOVE\_NORMAL, 0, CREATE\_SUSPENDED, NULL);
if(m\_hThread == NULL)
{
//TODO:Fehler beim Erzeugung des Threads melden
}
}
CProtToDBThread::~CProtToDBThread()
{
}
UINT CProtToDBThread::stuck\_out\_tongue:rotToDbThread( LPVOID pParam )
{
pProtokolList = ((cObjFactory\*)pParam)-\>GetProtocolObjManager()-\>getProtList(); // ProList
LPCSTR lpszTimerName = "";
while (m\_bBeenden == false)
{
cTimerObj nElement;
if(!pProtokolList-\>IsEmpty())
{
nElement = pProtokolList-\>GetFromFront();// Timerobjekt aus dem Anfang der Liste holen und löschen
((cObjFactory\*)pParam)-\>GetParamDB()-\>StoreProtocol(lpszTimerName, &nElement);// Timerobjekt speichern in der DB
}
}
//((cObjFactory\*)pParam)-\>GetProtocolObjManager()-\>getProtList(); // ProList
return 0;
}
HANDLE CProtToDBThread::GetHandle( void )
{
return m\_hThread;
}
void CProtToDBThread::Beenden( void )
{
m\_bBeenden = true;
}
void CProtToDBThread::Resume( void )
{
//m\_hThread-\>ResumeThread();
this-\>ResumeThread();
}
muss die Thread-Funktion static sein? ich darf damit nur auf statische variablen zugreifen.
brauche ich einen membervariable instanz von CwinThread in meiner Klasse oder kann ich „m_hThread“ verwenden
wie verwende die Funktionen „Resume“ richtig ?
wie steuere ich meinen Thread von aussen ?
und …
wie findet ihr mein Konzept?
danke für jede Hilfe
youssef