Forum: PC-Programmierung Visual C++: Wie Fenster bewegen ohne den Thread dahinter einzufrieren?


von Erwin M. (nobodyy)


Lesenswert?

Mit den Forms (Fenstern) von mit Visual C++ (2008) erstellten Programmen 
habe ich das Problem, das wenn sie bewegt werden, z. B. von links nach 
rechts gezogen werden, die Threads der Forms angealten (eingefroren) 
werden; d. h. nicht nur die Anzeigen frieren ein sondern auch die 
Threads der Formen!
Das ist ein Bug, denn auch bei älteren und mit Delphi erstellten 
Programm gibt es das Problem nicht.
Ich finde das Problem auch sonst nicht bei anderen Programmen; 
beispielsweise das aktuelle TV-Programm von xawtv angezeigt und 
Youtube-Videos über Firefox angezeigt laufen problemlos und ruckelfrei 
weiter wenn ich die Fenster bewege.

Deshalb meine Frage: Kann man, und wenn ja wie, diesen Bug bei Visual 
C++ (2008) abstellen?
Und falls nicht: Wo (mit welchen IDEs) gibt es den Bug nicht oder 
zumindest in abstellbarer Form?

von Peter II (Gast)


Lesenswert?

keien Ahnung was du machst, im normalfall hat man nur ein Mainthread und 
da passiert das nicht.

Die Frage ist also was machst du in dem Mainthread, läuft dort 
igendetwas?

von Ralf (Gast)


Lesenswert?

> Das ist ein Bug, denn auch bei älteren und mit Delphi erstellten
> Programm gibt es das Problem nicht.
Ich bezweifle, dass die Delphi-Programme auf .NET basieren -> Visual C++ 
(2008) ist doch .NET, oder?
Daher würd ich mal schauen, ob du nicht während dem Bewegen neu zeichnen 
lassen musst o.ä.

Ralf

von Peter II (Gast)


Lesenswert?

Ralf schrieb:
> Daher würd ich mal schauen, ob du nicht während dem Bewegen neu zeichnen
> lassen musst o.ä.

das macht der MainThread von alleine, wenn man ihn nicht blockiert.

von Sebastian-L (Gast)


Lesenswert?

Ralf schrieb:
> Ich bezweifle, dass die Delphi-Programme auf .NET basieren -> Visual C++
> (2008) ist doch .NET, oder?

Normalerweise ist das MFC hat aber mit Delphi genau so wenig zu tun!
http://www.e-strube.net/web/praxissoftware/diplom/kapit3.htm

von Peter II (Gast)


Lesenswert?

Sebastian-L schrieb:
> Normalerweise ist das MFC hat aber mit Delphi genau so wenig zu tun!

nein, er schreibt etwas von "Forms" und das in Kombination mit Visual 
C++ (2008) meint zu 99% C++/CLI also .net.

von Borislav B. (boris_b)


Lesenswert?

Erwin Meyer schrieb:
> Und falls nicht: Wo (mit welchen IDEs) gibt es den Bug nicht oder
> zumindest in abstellbarer Form?

Was soll das bitte mit der IDE zu tun haben? Das scheint wenn überhaupt 
ein Problem zwischen dem von dir verwendeten Fensterframework und deinem 
Betriebssystem zu sein.

Zu beidem schweigst du dich aber aus. Wie sollen wir dir da helfen?

von Erwin M. (nobodyy)


Lesenswert?

Also hier sind die Daten:

IDE: Microsoft Visual C++ 2008
Targeted Framework: .NET Framework 2.0
Platform: Win32
Projekt: Visual C++ CLR, Windows Forms Application
OS: WindowsXP

von Sebastian-L (Gast)


Lesenswert?

Peter II schrieb:
> Sebastian-L schrieb:
>> Normalerweise ist das MFC hat aber mit Delphi genau so wenig zu tun!
>
> nein, er schreibt etwas von "Forms" und das in Kombination mit Visual
> C++ (2008) meint zu 99% C++/CLI also .net.

Also wenn er "Forms" in Visual c++ sagt dann meine ich
http://www.functionx.com/visualc/Lesson08.htm
auch wenn man in MFC eher Dialoge dazu sagt
Ansonsten sind das Win. Forms wenn ich .Net haben will

Aber meine Meinung dazu ist:
entweder .Net mit c# oder VB
oder c++ mit MFC
alles dazwischen macht nur ärger

von Jasch (Gast)


Lesenswert?

Erwin Meyer schrieb:
> Mit den Forms (Fenstern) von mit Visual C++ (2008) erstellten Programmen
> habe ich das Problem, das wenn sie bewegt werden, z. B. von links nach
> rechts gezogen werden, die Threads der Forms angealten (eingefroren)
> werden; d. h. nicht nur die Anzeigen frieren ein sondern auch die
> Threads der Formen!

Forms. Bist Du sicher dass die überhaupt jeweils einen eigenen Thread 
haben?

Hmm, Forms (jedweder Form, sorry ;-), widerliches Zeug. Würde ich nicht 
mit der Kohlenzange...

> Das ist ein Bug, denn auch bei älteren und mit Delphi erstellten
> Programm gibt es das Problem nicht.

Da täuschst Du Dich sehr wahrscheinlich, also dass das ein Bug ist.

> Ich finde das Problem auch sonst nicht bei anderen Programmen;
> beispielsweise das aktuelle TV-Programm von xawtv angezeigt und
> Youtube-Videos über Firefox angezeigt laufen problemlos und ruckelfrei
> weiter wenn ich die Fenster bewege.

<grins mode="evil">Uuhhh, wusstest Du nicht dass Linux in jeder Hinsicht 
besser als Windoof ist?</grins>

> Deshalb meine Frage: Kann man, und wenn ja wie, diesen Bug bei Visual
> C++ (2008) abstellen?

Das ist ziemlich sicher kein Bug sondern im Programmiermodell so 
angelegt. Doku lesen und so programmieren dass das nicht auftritt.

Wobei mir unklar ist wieso das signifikant ist, wie lange zerren denn 
die Luser die Fenster in der Gegend herum?

von Sebastian-L (Gast)


Lesenswert?

Jasch schrieb:
> Forms. Bist Du sicher dass die überhaupt jeweils einen eigenen Thread
> haben?

In sofern als eine Form Anwendung wie eine normale Anwendung natürlich 
in einem Prozess mit einem Thread abläuft.

Wenn du also im Hintergrund Berechnungen anstellst die länger dauern und 
deshalb in einem Eigenen Thread laufen(sollten) damit die Oberfläche 
nicht einfriert. sollte das umgekehrt auch nicht passieren.

Erwin Meyer schrieb:
> d. h. nicht nur die Anzeigen frieren ein sondern auch die
> Threads der Formen!

sollte bei sauberer Programmierung nicht passieren. (wobei ich die 
Ausdrucksweise etwas unverständlich finde)
Also her mit dem Code!

in sofern Hast du recht Jasch, aber lass das Windows gebashe.

von Jasch (Gast)


Lesenswert?

Sebastian-L schrieb:
> Jasch schrieb:
>> Forms. Bist Du sicher dass die überhaupt jeweils einen eigenen Thread
>> haben?
>
> In sofern als eine Form Anwendung wie eine normale Anwendung natürlich
> in einem Prozess mit einem Thread abläuft.

Einer wird da wohl kaum reichen...

> Wenn du also im Hintergrund Berechnungen anstellst die länger dauern und
> deshalb in einem Eigenen Thread laufen(sollten) damit die Oberfläche
> nicht einfriert. sollte das umgekehrt auch nicht passieren.

Wenn Du das explizit so programmiert hast - cf. Programmiermodell (das 
ist nicht trivial). Was mein Punkt war.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.