Was bedeutet folgende Fehlermeldung bei 'YieldIfNeeded' ?

Plattformunabhängige GUIs mit wxWidgets.
Benutzeravatar
snakeseven
User
Beiträge: 405
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Was bedeutet folgende Fehlermeldung bei 'YieldIfNeeded' ?

Beitragvon snakeseven » Dienstag 15. Januar 2008, 22:07

Hallöchen,
ist einem von euch vieleicht schon mal folgende Fehlermeldung begegnet? Kann damit nichts anfangen, aber sie taucht immer wieder auf, ohne dass ich weiß warum!?

[code=]return _core_.YieldIfNeeded(*args)
PyAssertionError: C++ assertion "wxThread::IsMain()" failed at ..\..\src\msw\evtloop.cpp(244) in wxEventLoop::Dispatch(): only the main thread can process Windows messages[/code]

Grüße, Seven
Nikolas
User
Beiträge: 102
Registriert: Dienstag 25. Dezember 2007, 22:53
Wohnort: Freiburg im Breisgau

Beitragvon Nikolas » Dienstag 15. Januar 2008, 22:25

Wo taucht sie denn auf?
Erwarte das Beste und sei auf das Schlimmste vorbereitet.
Benutzeravatar
snakeseven
User
Beiträge: 405
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Beitragvon snakeseven » Dienstag 15. Januar 2008, 23:12

Nikolas hat geschrieben:Wo taucht sie denn auf?


in einer While-Schleife:

Code: Alles auswählen

while pos0 > 0:
    if self.quitt: break
    wx.YieldIfNeeded()
   
    pos1 = self.source.find('lightbluetext8',pos0)   
    if 'abel' in self.source[pos1:pos1+40]:                 
        pos2 = self.source.find('abel',pos1,pos1+40)   
        pos3 = self.source.find(' ',pos2-2,pos2)           
        if pos3 > 0:
            pos4 = self.source.find('</td></tr>',pos2)   
            pos5 = self.source.find('">',pos4-17)           
            label = self.source[pos5+2:pos4]
    pos0 = pos1+1


auch nur sporadisch, deswegen komme ich nicht dahinter, was sie bedeutet.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Dienstag 15. Januar 2008, 23:25

snakeseven hat geschrieben:

Code: Alles auswählen

while pos0 > 0:
    if self.quitt: break
    wx.YieldIfNeeded()
   
    pos1 = self.source.find('lightbluetext8',pos0)   
    ...

auch nur sporadisch, deswegen komme ich nicht dahinter, was sie bedeutet.

Hallo Seven!

Der Hinweis ist >>only the main thread can process Windows messages<<. Du arbeitest hier evt. in einem Thread, der nicht die Herrschaft über die GUI hat. Nimm ``wx.CallAfter`` um den Aufruf threadübergreifend zu verpacken.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
snakeseven
User
Beiträge: 405
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Beitragvon snakeseven » Freitag 18. Januar 2008, 14:16

Hi Gerold,
wieder mal ins Schwarze getroffen!

[code=]wx.CallAfter(wx.YieldIfNeeded)[/code]
bringts

Gruß, Seven

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder