ThreadedGUI

From ParaQ Wiki
Jump to navigationJump to search

Minimum Requirements

While server manager/servers are busy:

  • support repainting of GUI to look alive
  • support minimizing, restoring, maximizing of GUI
  • support exiting of application

Would-be-nice-to-have Requirements

  • support interaction with non-busy servers (open another file on another server, view model in graphics window for non-busy server, etc...)

Possible solutions considered

1. One thread for GUI and one thread for server manager.
2. One thread for GUI and server manager, multiple threads, one for each server.
3. One thread for GUI and multiple threads, one for each server manager.
4. One thread for GUI, server manager, and all servers.

Threading issues and considerations

  • Client side OpenGL may not support multiple threads. Which means render module(s) might need to be on GUI thread.
  • Inter-server interactions get complicated by threading. Consider data comparison between two servers. A client side VTK filter can interact with reduced data on multiple servers.
  • Threads don't play well with MPI.
  • 3d Widgets
  • GUI on separate thread from server manager means extra work to get the render module's image to the gui screen vtkRenderWindow/QVTKWidget issue.

Proposed Solution

Multithreading the server manager is basically not worth it. Solution #4 is suggested. The servers should be sending progress events back to the client at all times. The GUI client can use that time to update progress bars, respond to users minimizing, maximizing, repaints, etc... This means interaction with non-busy servers would not be supported. The graphics window during these times could actually paint something that shows the server manager is busy generating an image.