D
Hi!
Erstmal im vorhinein: Ich hab leider nicht sehr viel Erfahrung mit Thread, aber mir ist dank dieses Forums gelungen mir etwas Wissen darüber anzulesen und auch einen Thread zu erstellen.
Die Aufgabe des Threads soll darin liegen meine TreeCtrl mir Daten aus einer DB zu füllen. Da dies eine Zeit lang dauert und ich zusätzlich dazu eine Progressbar anzeigen möchte dachte ich mir Threads wären hier wohl das richtige.
Hier erstmal meine Dateien:
Thread.h
#pragma once
#include "AbiplanerDlg.h"
#include "Global.h"
#include "CAutoCompleteEdit.h"
//#include "Abiplaner.h"
class CThread : public CWinThread
{
DECLARE_DYNCREATE(CThread)
//protected:
public:
CThread(); // Dynamische Erstellung verwendet geschützten Konstruktor
virtual ~CThread();
public:
virtual BOOL InitInstance();
virtual int ExitInstance();
// virtual int Run();
CAbiplanerDlg* m_dialogvar;
CAbiplanerDlg* m_pOwner;
void SetOwner(CAbiplanerDlg* pOwner)
{
m_pOwner = pOwner;
}
CTreeCtrl* mp_TreeCtrl;
CAutoCompleteEdit* mp_ctlAutoCompleteSearch;
void LoadDBAutoCmp();
protected:
DECLARE_MESSAGE_MAP()
};
Thread.cpp
// Thread.cpp : Implementierungsdatei
//
#include "stdafx.h"
#include "Abiplaner.h"
#include "Thread.h"
#include "AbiplanerDlg.h"
#include "Global.h"
#include "afxdao.h"
IMPLEMENT_DYNCREATE(CThread, CWinThread)
CThread::CThread()
{
}
CThread::~CThread()
{
}
BOOL CThread::InitInstance()
{
// TODO: Initialisierung hier durchführen und Threads verwenden
//MessageBeep(0);
CGlobal varGlb;
varGlb.LoadTree(mp_TreeCtrl);
varGlb.WriteCountTreeItem(mp_TreeCtrl);
MessageBeep(1);
return TRUE;
}
int CThread::ExitInstance()
{
// TODO: Bereinigungen hier pro Thread durchführen
return CWinThread::ExitInstance();
}
BEGIN_MESSAGE_MAP(CThread, CWinThread)
END_MESSAGE_MAP()
Threadaufruf:
CThread* m_xDisplayThread;
m_xDisplayThread = (CThread*)
AfxBeginThread(RUNTIME_CLASS(CThread), NULL,
0, CREATE_SUSPENDED);
m_xDisplayThread->mp_TreeCtrl = &m_ctlTreeCtrl;
m_xDisplayThread->SetOwner(this);
m_xDisplayThread->ResumeThread();
LoadTree() greift logischer weise auf meine Db zu.
Das mit dem Daten laden klappt auch so weit. wenn ich jedoch versuch wieder auf die Datenbank zuzugreifen kommt stürzt das Programm ab...
Ich denke das das Problem vielleicht daher das der Thread noch läuft oder so. Ich hab leider keine Ahnung.
PS: Ich habe in der Thread.h folgendes abgeändert, damit ich zugriff auf den Konstruktor hatte:
Aus
class CThread : public CWinThread
{
DECLARE_DYNCREATE(CThread)
protected:
CThread(); // Dynamische Erstellung verwendet geschützten Konstruktor
virtual ~CThread();
wurde
class CThread : public CWinThread
{
DECLARE_DYNCREATE(CThread)
//protected:
public:
CThread(); // Dynamische Erstellung verwendet geschützten Konstruktor
virtual ~CThread();
Ich bin für jede Hilfe Dankbar!
Gruß
Chris