
Hi! When my plugin talks with chimera, it does so from a foreign thread. I am currently using an approach I have "stolen" from the DelphiViewer-plugin which fetches the see __init__.py>> self.parent = chimera.tkgui.app gui-thread and places a callback see __init__.py>> self.parent.after(100, self.CheckProcess) I have added a queue in between, so my extension feeds the queue, which the gui-thread is frequently asked to process (and empty) What I actually want to know is if there some kind of functionality like this already in chimera: The programmer of the DelphiViewer suspected something like that in the trigger-stuff __init__.py: # modify this to use the chimera.triggerSet? but I can not find any threading stuff there, just plain single-thread-callbacks......or am I wrong Thank for your help Lars

On Friday, October 10, 2003, at 02:34 AM, Lars Kunert wrote:
Hi!
When my plugin talks with chimera, it does so from a foreign thread. I am currently using an approach I have "stolen" from the DelphiViewer-plugin
which fetches the
see __init__.py>> self.parent = chimera.tkgui.app
gui-thread and places a callback
see __init__.py>> self.parent.after(100, self.CheckProcess) I have added a queue in between, so my extension feeds the queue, which the gui-thread is frequently asked to process (and empty)
If I understand your problem correctly, it seems like what your doing here can alternatively be accomplished by using Chimera's trigger mechanism. I'm not sure if you're familiar with Chimera's triggers. Briefly, they are a way for Chimera and extensions to register interest in a certain event, and to specify that certain callbacks should be invoked when that event happens. There are three steps to using the triggers: 1) Create a triggerset and add a trigger. This is just a name to uniquely identify the event. ts = TriggerSet.TriggerSet() ts.addTrigger("Check Process") 2) add a handler. This handler will be invoked when the trigger is, ummmm, triggered. "Check Process" is the name of the trigger to register the handler with, self.processChanges is the function to call when the trigger is invoked, and data is an arbitrary argument ts.addHandler("Check Process", self.processChanges, data) 3) Actually invoke the trigger. All the callbacks associated with the trigger will be called in the order they were registered. "Check Process" is the name of the trigger to activate, and additionalData is any data that should be passed to the function. ts.activateTrigger("Check Process", additionalData) For more information on chimera's trigger mechanism, see the example at the top of CHIMERA/share/chimera/triggerSet.py
What I actually want to know is if there some kind of functionality like this already in chimera:
The programmer of the DelphiViewer suspected something like that in the trigger-stuff
__init__.py: # modify this to use the chimera.triggerSet?
but I can not find any threading stuff there, just plain single-thread-callbacks......or am I wrong
Chimera only uses one thread, although some extension to Chimera do use multiple threads, and everything in Chimera is compiled to be threadable. All the callbacks that happen in Chimera originate from a single event loop. I hope this helps, and please feel free to email with any more questions, or if any of this requires further clarification. Dan Greenblatt Computer Graphics Lab University of California, San Francisco dan@cgl.ucsf.edu
participants (2)
-
Daniel Greenblatt
-
Lars Kunert