Ik heb een programma dat gebruik maakt van meerdere threads. Die threads spelen elk bijvoorbeeld een mediabestand af. Nou wil ik de gebruiker op een nette manier laten weten als een bestand niet gevonden kan worden door een thread. Dus heb ik iets gemaakt waarmee middels popup-windows op het mainscherm (vergelijk het met de MSN-popups) een melding wordt gegeven, die weggeklikt kan worden door de gebruiker, maar de gebruiker niet onderbreekt bij wat 'ie aan het doen is:

Vanuit de GUI-thread werkt het allemaal prima; 'notifications' maken en laten zien is geen probleem. Maar zodra een andere thread dat probeert gaat het fout; het programma loopt vast, terwijl het geen CPU gebruikt, dus ik vermoed dat er ergens een deadlock is wat betreft window messages (ik kan me geen threadlock van mezelf bedenken die dit probleem zou kunnen veroorzaken) logisch ook, want windows creeëren in een andere thread gaat sowieso niet helemaal lekker (en de afspeel-threads hebben in dit geval geen message-loop).
Is het op een simpele manier (en dan niet zelfbedachte messages sturen ofzo) om code uit te laten voeren door de GUI-thread zoals dat in Java kan met bijvoorbeeld SwingUtilities.invokeAndWait? Of wat is volgens jullie de beste manier om dit probleem op te lossen?

Vanuit de GUI-thread werkt het allemaal prima; 'notifications' maken en laten zien is geen probleem. Maar zodra een andere thread dat probeert gaat het fout; het programma loopt vast, terwijl het geen CPU gebruikt, dus ik vermoed dat er ergens een deadlock is wat betreft window messages (ik kan me geen threadlock van mezelf bedenken die dit probleem zou kunnen veroorzaken) logisch ook, want windows creeëren in een andere thread gaat sowieso niet helemaal lekker (en de afspeel-threads hebben in dit geval geen message-loop).
Is het op een simpele manier (en dan niet zelfbedachte messages sturen ofzo) om code uit te laten voeren door de GUI-thread zoals dat in Java kan met bijvoorbeeld SwingUtilities.invokeAndWait? Of wat is volgens jullie de beste manier om dit probleem op te lossen?
[ Voor 4% gewijzigd door MisterData op 28-05-2006 00:22 ]