BALL
1.4.1
|
#include <BALL/VIEW/KERNEL/threads.h>
Public Member Functions | |
BALLThread () | |
void | setMainControl (MainControl *mf) |
void | setComposite (Composite *composite) |
Composite * | getComposite () |
virtual void | run () |
Protected Member Functions | |
void | sendMessage_ (Message *msg) |
void | updateStructure_ () |
void | output_ (const String &string, bool important=false) |
Sends the string as outout to Log.info. | |
void | waitForUpdateOfRepresentations_ () |
Protected Attributes | |
MainControl * | main_control_ |
Composite * | composite_ |
Baseclass for threads in BALL. To use multithreading in BALL, there are several problems arising from the fact, that Qt itself is not threadsafe: 1. Prevent any output to Log, stdout or sterr. If a simulation has to print some informations, use the method output_, which will send an Event to the GUI-thread. 2. Dont call any Qt-methods directly. If you need some interaction with the GUI, send a QEvent to the MainControl. 3. Especially dont call the refresh methods for the Scene or GL-methods. Use updateStructure_() instead. 4. Overload the run method to insert the multithreaded code. 5. Call setMainControl() before running the thread 6. Before running a thread, lock the composites with ModularWidget::lockComposites(). 7. After running a thread, unlock them with ModularWidget::unlockComposites(). If you dont pay attention to these rules, dont wonder if BALLView should freeze or crash!
Composite* BALL::VIEW::BALLThread::getComposite | ( | ) | [inline] |
void BALL::VIEW::BALLThread::output_ | ( | const String & | string, |
bool | important = false |
||
) | [protected] |
Sends the string as outout to Log.info.
virtual void BALL::VIEW::BALLThread::run | ( | ) | [inline, virtual] |
Overloaded from QThread::run(), overload again in derived classes!
Reimplemented in BALL::VIEW::DockingThread, BALL::VIEW::MDSimulationThread, BALL::VIEW::EnergyMinimizerThread, BALL::VIEW::UpdateRepresentationThread, BALL::VIEW::CalculateFDPBThread, and BALL::VIEW::ServerWidget::BALLViewServer.
void BALL::VIEW::BALLThread::sendMessage_ | ( | Message * | msg | ) | [protected] |
void BALL::VIEW::BALLThread::setComposite | ( | Composite * | composite | ) | [inline] |
void BALL::VIEW::BALLThread::setMainControl | ( | MainControl * | mf | ) | [inline] |
void BALL::VIEW::BALLThread::updateStructure_ | ( | ) | [protected] |
Provokes an update of the Representation's and the Scene with rebuild of the display-lists. This method sends a CompositeMessage with a pointer to the Composite and type CHANGED_COMPOSITE. As a result, the method MainControl::updateRepresentationsOf(..) will be called.
void BALL::VIEW::BALLThread::waitForUpdateOfRepresentations_ | ( | ) | [protected] |
Wait until all Representation's are rebuild, by using RepresentationManager::updatePending() and \ RepresentationManager::getUpdateWaitCondition().wait() .
Composite* BALL::VIEW::BALLThread::composite_ [protected] |
MainControl* BALL::VIEW::BALLThread::main_control_ [protected] |