<html><body><div style="color:#000; background-color:#fff; font-family:times new roman, new york, times, serif;font-size:12pt"><div><span>Thanks for the reply,<br><br>On our initial attempts using QThread (Qt's threading system) we ran into problems with the OpenGL context switching between threads <br>(wglMakeCurrent errors).<br><br>And based on some quick research, the underlying VTK library is not thread-safe so it seems like there would be some additional complexity involved from dealing with locking/mutexes when accessing the renderer from multiple threads.<br><br>I'm wondering if I'm on the right path here and if anyone has run into similar problems related to rendering and even general GUI responsiveness and how you've solved them in your IGS applications.<br><br>Cheers, Alo</span></div><div><br></div>  <div style="font-size: 12pt; font-family: "times new roman", "new york", "times", serif"> <div style="font-size:
 12pt; font-family: "times new roman", "new york", "times", serif"> <div dir="ltr"> <font size="2" face="Arial"> <hr size="1">  <b><span style="font-weight:bold;">From:</span></b> "Cheng, Patrick" <PCheng@childrensnational.org><br> <b><span style="font-weight: bold;">To:</span></b> Alo Mihkelson <alo_m1@yahoo.com>; igstk-users@public.kitware.com <br> <b><span style="font-weight: bold;">Sent:</span></b> Thursday, January 12, 2012 6:58 PM<br> <b><span style="font-weight: bold;">Subject:</span></b> RE: [IGSTK-Users] Threaded IGSTK views with Qt<br> </font> </div> <br>
<meta http-equiv="x-dns-prefetch-control" content="off"><div id="yiv723237296"><style><!--
#yiv723237296  
 _filtered #yiv723237296 {font-family:SimSun;panose-1:2 1 6 0 3 1 1 1 1 1;}
 _filtered #yiv723237296 {font-family:"Cambria Math";panose-1:2 4 5 3 5 4 6 3 2 4;}
 _filtered #yiv723237296 {font-family:Calibri;panose-1:2 15 5 2 2 2 4 3 2 4;}
 _filtered #yiv723237296 {font-family:Tahoma;panose-1:2 11 6 4 3 5 4 4 2 4;}
 _filtered #yiv723237296 {font-family:SimSun;panose-1:2 1 6 0 3 1 1 1 1 1;}
 _filtered #yiv723237296 {font-family:NSimSun;panose-1:2 1 6 9 3 1 1 1 1 1;}
#yiv723237296  
#yiv723237296 p.yiv723237296MsoNormal, #yiv723237296 li.yiv723237296MsoNormal, #yiv723237296 div.yiv723237296MsoNormal
        {margin:0in;margin-bottom:.0001pt;font-size:12.0pt;font-family:"serif";}
#yiv723237296 a:link, #yiv723237296 span.yiv723237296MsoHyperlink
        {color:blue;text-decoration:underline;}
#yiv723237296 a:visited, #yiv723237296 span.yiv723237296MsoHyperlinkFollowed
        {color:purple;text-decoration:underline;}
#yiv723237296 span.yiv723237296EmailStyle17
        {font-family:"sans-serif";color:#1F497D;}
#yiv723237296 .yiv723237296MsoChpDefault
        {font-size:10.0pt;}
 _filtered #yiv723237296 {margin:1.0in 1.25in 1.0in 1.25in;}
#yiv723237296 div.yiv723237296WordSection1
        {}
--></style><div><div class="yiv723237296WordSection1"><div class="yiv723237296MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125); font-family: "sans-serif"">Hi Alo,</span></div><div class="yiv723237296MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125); font-family: "sans-serif"">  </span></div><div class="yiv723237296MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125); font-family: "sans-serif"">You could consider doing it the other way around: spin off your resource intensive computation into a separate thread.</span></div><div class="yiv723237296MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125); font-family: "sans-serif"">  </span></div><div class="yiv723237296MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125); font-family: "sans-serif"">Take a look at igstkTracker class where we use ITK thread to create a separate thread to
 interact with the physical tracker.</span></div><div class="yiv723237296MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125); font-family: "sans-serif"">  </span></div><div class="yiv723237296MsoNormal"><span style="font-size: 9.5pt; font-family: "NSimSun"">itk::MultiThreader::Pointer     m_Threader;</span></div><div class="yiv723237296MsoNormal"><span style="font-size: 9.5pt; font-family: "NSimSun"">m_Threader = itk::MultiThreader::New();</span></div><div class="yiv723237296MsoNormal"><span style="font-size: 9.5pt; font-family: "NSimSun"">  </span></div><div class="yiv723237296MsoNormal"><span style="font-size: 9.5pt; font-family: "NSimSun"">m_ThreadID = m_Threader->SpawnThread( TrackingThreadFunction, <span style="color:blue;">this</span> );</span></div><div class="yiv723237296MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125); font-family:
 "sans-serif"">  </span></div><div class="yiv723237296MsoNormal"><span style="font-size: 9.5pt; font-family: "NSimSun"">ITK_THREAD_RETURN_TYPE Tracker::TrackingThreadFunction(<span style="color:blue;">void</span>* pInfoStruct)</span></div><div class="yiv723237296MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125); font-family: "sans-serif"">  { </span></div><div class="yiv723237296MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125); font-family: "sans-serif"">  ….</span></div><div class="yiv723237296MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125); font-family: "sans-serif"">  }</span></div><div class="yiv723237296MsoNormal"><span style="font-size: 9.5pt; font-family: "NSimSun"">  </span></div><div class="yiv723237296MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125); font-family: "sans-serif"">Hope
 this helps,</span></div><div class="yiv723237296MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125); font-family: "sans-serif"">  </span></div><div class="yiv723237296MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125); font-family: "sans-serif"">Patrick</span></div><div class="yiv723237296MsoNormal"><span style="font-size: 11pt; color: rgb(31, 73, 125); font-family: "sans-serif"">  </span></div><div><div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in;"><div class="yiv723237296MsoNormal"><b><span style="font-size: 10pt; font-family: "sans-serif"">From:</span></b><span style="font-size: 10pt; font-family: "sans-serif""> igstk-users-bounces@public.kitware.com [mailto:igstk-users-bounces@public.kitware.com] <b>On Behalf Of </b>Alo Mihkelson<br><b>Sent:</b> Thursday, January 12, 2012 5:28 AM<br><b>To:</b>
 igstk-users@public.kitware.com<br><b>Subject:</b> [IGSTK-Users] Threaded IGSTK views with Qt</span></div></div></div><div class="yiv723237296MsoNormal">  </div><div><div><div class="yiv723237296MsoNormal" style="background:white;"><span style="color:black;">We're using IGSTK with Qt and would like to move the view rendering to a separate thread to avoid GUI slowdowns while rendering resource intensive (low-FPS) scenes. Is there a way to move the views/rendering out of the main Qt thread?</span></div></div></div></div></div></div><meta http-equiv="x-dns-prefetch-control" content="on"><br><br> </div> </div>  </div></body></html>