Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Thread

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
15.10.2004, 14:01 Uhr
~Susanne
Gast


Hallo zusammen.
Ich habe da ein Problem. Habe unter VS 6.0 ein SDI - Programm erstellt mit CFormView als Basisklasse. Dort habe ich einen Thread erzeugt. Ich weiß das ich innerhalb des Threads kein UpdateData aufrufen darf. Mir ist aber nicht klar wie ich sonst meine Integer-Werte, die auf dem Bildschirm angezeigt werden, zur Laufzeit des Threads aktualisieren kann.
Habe in einer dialogfeldbasierten Anwendung schon mal mit damit gearbeitet:

C++:
void CDialogDlg::OnBUTTONThreadGo()
{
      m_Flag = 1;
   CWinThread* pThread = AfxBeginThread (Thread, this);
}

void CDialogDlg::OnBUTTONThreadStop()
{
     m_Flag = 0;
}


UINT CDialogDlg::Thread(LPVOID pParam)
{
  CDialogDlg* pDlg = ( CDialogDlg*) pParam;
  pDlg->Count();

  return 0;

}



void CDialogDlg::Count()
{
  while (m_Flag)  
  {
    ......   m_Variable++;    // Diese Variable soll angezeigt werden....
     GetDlgItem(IDC_STATIC)->SetWindowText("TRUE");  
  ........
  }
}



Damit habe ich es hingekommen, Textfelder zu ändern. In einer SDI-Anwendung funktioniert das aber irgendiew nicht. Da stürzt mir das Program ab.
Wie krieg ich das bei einer SDI -Anwendung hin und vor allem, wie änder ich Integer-Werte und keine Texte auf meinem Bildschirm?

Bin noch nicht lange am programmieren und bräuchte dringend eure Hilfe....

Susanne

Dieser Post wurde am 15.10.2004 um 14:05 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.10.2004, 14:06 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


probier mal es mal statt mit SetWindowText mit SendMessage oder Postmessage
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.10.2004, 14:30 Uhr
~Susanne
Gast


Jetzt stürtzt mein SDI-Programm zwar nicht mehr ab, aber die Daten auf dem Bildschirm aktuallisieren sich nicht. Hab es so gemacht:


PostMessage(IDC_STATIC,m_Variable);
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.10.2004, 14:58 Uhr
~Susanne
Gast


Das ging leider auch nicht :

GetDlgItem(IDC_STATIC)->EnableWindow(TRUE);

Absturtz hoch 7
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.10.2004, 15:25 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


so ohne damit rumzuspielen weiss ich das jetzt auch nciht aus dem hut (aber bestimmt wissens andere...)

kannst ja mal sowas in der art probieren

C++:
::SostMessage(pDlg ->m_hWnd,WM_CLOSE,NULL,NULL);


musst mal in der MSDN eingeben wie die ganzen nachrrichten heissen... WM irgendwas.... erste paramter musst du dann irgendwie ein handel für dein steuerelement besorgen...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
15.10.2004, 16:03 Uhr
Spacelord
Hoffnungsloser Fall


Hi,
du musst dem Thread anstatt des Pointers das Handle auf den Dialog übergeben.
Fensterobjekte sollten nach Möglichkeit nur im Thread benutzt werden der es erstellt hat.

Um es ganz grob zu sagen führt eine MFC Anwendung intern diverse Listen in denen u.a. eine Zuordnung vom CWnd* Objekt zu den Handles der realen Fenster die vom C-Kernel erstellt wurden stattfindet.Dein Problem ist dass dein Pointer in der HandleMap deines Threads nicht gefunden wird.

Probiers mal so:

C++:
void CDialogDlg::OnBUTTONThreadGo()
{
      m_Flag = 1;
   CWinThread* pThread = AfxBeginThread (Thread, this->m_hWnd);
}


UINT CDialogDlg::Thread(LPVOID pParam)
{
  HWND hDlg= (HWND)pParam;
  HWND hStatic = ::GetDlgItem(hDlg,IDC_STATIC);
  ::SetWindowText(hStatic,"TRUE");

  return 0;
}



MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
18.10.2004, 10:10 Uhr
~Susanne
Gast


@Spacelord

und was ist m_hWnd für eine Variable??
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
18.10.2004, 10:16 Uhr
~Susanne
Gast


@Spacelord

leider hat dein Programm auch nicht den gewünschten Erfolg. Die Variable wird nicht aktuallisiert....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
18.10.2004, 10:24 Uhr
~Susanne
Gast


@Spacelord Ups, da war ich etwas voreilig. Sorry. Dein Programm funzt prima.... aber nur in einer dialogfeldbasierten Anwendung. Bei meiner SDI-Anwedung tritt das zuvor beschriebene Problem auf.

hab auch grad gesehen das ich euch das Beispiel der dialogfeldbasierten Anwendung gegeben hab (Klasse C...Dlg) . Da mein Programm aber einer SDI-Anwendung ist habe ich die Basisklasse C.....View. Der Rest ist gleich. Tut mir Leid falls ich euch da verwirrt hab bzw. in die falsche Richtung getrieben hab...

Grüße
Susanne
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
18.10.2004, 12:54 Uhr
Spacelord
Hoffnungsloser Fall


Der Code von oben müsste mit Typanpassungen aber auch für CView funktionieren.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: