From 47344ac4f0a977d14c539921adc2de84808f3df0 Mon Sep 17 00:00:00 2001 From: Eduardo Davila Date: Fri, 20 Mar 2009 14:43:03 +0000 Subject: [PATCH] BUG Threads MacOs --- appli/TestWxGimmickDialog/CMakeLists.txt | 2 +- .../TestWxGimmickReaderDialog/CMakeLists.txt | 2 +- appli/wxGimmick/CMakeLists.txt | 2 +- src/treelistctrl.cpp | 8 +- src2/creaImageIOGimmickView.cpp | 12 ++- src2/creaImageIOMultiThreadImageReader.cpp | 18 ++-- src2/creaImageIOWxGimmickView.cpp | 19 ++-- src2/creaImageIOWxViewer.cpp | 96 ++++++------------- src2/creaImageIOWxViewer.h | 2 + 9 files changed, 72 insertions(+), 89 deletions(-) diff --git a/appli/TestWxGimmickDialog/CMakeLists.txt b/appli/TestWxGimmickDialog/CMakeLists.txt index 80cb7f4..a42fd05 100644 --- a/appli/TestWxGimmickDialog/CMakeLists.txt +++ b/appli/TestWxGimmickDialog/CMakeLists.txt @@ -3,7 +3,7 @@ IF(WIN32) ADD_EXECUTABLE(TestWxGimmickDialog WIN32 main) SET_TARGET_PROPERTIES(TestWxGimmickDialog PROPERTIES LINK_FLAGS /subsystem:console ) ELSE(WIN32) - ADD_EXECUTABLE(TestWxGimmickDialog main) + ADD_EXECUTABLE(TestWxGimmickDialog MACOSX_BUNDLE main) ENDIF(WIN32) TARGET_LINK_LIBRARIES( TestWxGimmickDialog creaImageIO) diff --git a/appli/TestWxGimmickReaderDialog/CMakeLists.txt b/appli/TestWxGimmickReaderDialog/CMakeLists.txt index aad22cb..8b9e7a5 100644 --- a/appli/TestWxGimmickReaderDialog/CMakeLists.txt +++ b/appli/TestWxGimmickReaderDialog/CMakeLists.txt @@ -3,7 +3,7 @@ IF(WIN32) ADD_EXECUTABLE(TestWxGimmickReaderDialog WIN32 main) SET_TARGET_PROPERTIES(TestWxGimmickReaderDialog PROPERTIES LINK_FLAGS /subsystem:console ) ELSE(WIN32) - ADD_EXECUTABLE(TestWxGimmickReaderDialog main) + ADD_EXECUTABLE(TestWxGimmickReaderDialog MACOSX_BUNDLE main) ENDIF(WIN32) TARGET_LINK_LIBRARIES( TestWxGimmickReaderDialog creaImageIO2) diff --git a/appli/wxGimmick/CMakeLists.txt b/appli/wxGimmick/CMakeLists.txt index f94aeaf..81221ff 100644 --- a/appli/wxGimmick/CMakeLists.txt +++ b/appli/wxGimmick/CMakeLists.txt @@ -3,7 +3,7 @@ IF(WIN32) ADD_EXECUTABLE(${NAME} WIN32 main) SET_TARGET_PROPERTIES(${NAME} PROPERTIES LINK_FLAGS /subsystem:console ) ELSE(WIN32) - ADD_EXECUTABLE(${NAME} main) + ADD_EXECUTABLE(${NAME} MACOSX_BUNDLE main) ENDIF(WIN32) TARGET_LINK_LIBRARIES( ${NAME} creaImageIO2) diff --git a/src/treelistctrl.cpp b/src/treelistctrl.cpp index 2df0ab9..c376204 100644 --- a/src/treelistctrl.cpp +++ b/src/treelistctrl.cpp @@ -4,7 +4,7 @@ // Author: Robert Roebling // Maintainer: Otto Wyss // Created: 01/02/97 -// RCS-ID: $Id: treelistctrl.cpp,v 1.3 2008/10/01 14:23:59 guigues Exp $ +// RCS-ID: $Id: treelistctrl.cpp,v 1.4 2009/03/20 14:43:12 davila Exp $ // Copyright: (c) 2004 Robert Roebling, Julian Smart, Alberto Griggio, // Vadim Zeitlin, Otto Wyss // Licence: wxWindows @@ -1133,7 +1133,11 @@ void wxTreeListHeaderWindow::DoDrawRect( wxDC *dc, int x, int y, int w, int h ) dc->DrawRectangle( x, y+h, w+1, 1 ); // bottom (outer) #if defined( __WXMAC__ ) - wxPen pen( wxColour( 0x88 , 0x88 , 0x88 ), 1, wxSOLID ); + + // EED + // wxPen pen( wxColour( 0x88 , 0x88 , 0x88 ), 1, wxSOLID ); + pen.SetColour( wxColour( 0x88 , 0x88 , 0x88 ) ); + #endif dc->SetPen( pen ); dc->DrawLine( x+w-m_corner, y, x+w-1, y+h ); // right (inner) diff --git a/src2/creaImageIOGimmickView.cpp b/src2/creaImageIOGimmickView.cpp index a1c29ce..3ce0f5c 100644 --- a/src2/creaImageIOGimmickView.cpp +++ b/src2/creaImageIOGimmickView.cpp @@ -15,8 +15,9 @@ namespace creaImageIO { GimmickDebugMessage(1,"GimmickView::GimmickView" <& sel, int min_dim, int max_dim) { GimmickMessage(2,"Validating selected"<0) @@ -276,6 +283,7 @@ namespace creaImageIO void GimmickView::RequestReading(tree::Node* n, int prio, int selection_index) { + mReader.Start(); ImageEventType t(n,0,selection_index); mImageEventMap[n->GetAttribute("FullFileName")] = t; mReader.Request(this,n->GetAttribute("FullFileName"),prio); diff --git a/src2/creaImageIOMultiThreadImageReader.cpp b/src2/creaImageIOMultiThreadImageReader.cpp index 717b09c..053f77e 100644 --- a/src2/creaImageIOMultiThreadImageReader.cpp +++ b/src2/creaImageIOMultiThreadImageReader.cpp @@ -60,10 +60,10 @@ namespace creaImageIO mQueue.set(mIndexer); // // no thread : alloc self reader - if (number_of_threads==0) - { +// if (number_of_threads==0) +// { mReader = new ImageReader(); - } +// } } //===================================================================== @@ -74,6 +74,8 @@ namespace creaImageIO // std::cout << "#### MultiThreadImageReader::Start()" // < 0) return true; + ThreadedImageReaderListType::iterator i; for (i =mThreadedImageReaderList.begin(); i!=mThreadedImageReaderList.end(); @@ -187,9 +189,10 @@ namespace creaImageIO const std::string& filename, int priority ) { - wxMutexLocker lock(GetMultiThreadImageReaderUserMutex()); //mMutex); + wxMutexLocker lock(GetMultiThreadImageReaderUserMutex()); //mMutex); - if (mThreadedImageReaderList.size()==0) + if (mNumberOfThreadedReadersRunning==0) +// if (mThreadedImageReaderList.size()==0) { // no detached reader : use self reader ImageToLoad itl(user,filename); @@ -281,7 +284,7 @@ namespace creaImageIO //===================================================================== vtkImageData* MultiThreadImageReader::GetImage(const std::string& filename) { - + // Start(); // std::cout << "** MultiThreadImageReader::GetImage('"<Add(mText,1,wxGROW,0); // Previewer mViewer = new WxViewer(mBottomPanel, wxID_ANY, wxT("Gimmick! Viewer"),wxDefaultPosition, wxDefaultSize ); mViewer->SetMovieSize(1); mViewer->SetImage(0,GetDefaultImage()); + mViewer->ShowNextImage(); - bottom_sizer->Add(mViewer,1,wxGROW,0); + bottom_sizer->Add(mViewer,1,wxGROW,1); // mViewer->Show(); + mText = new wxStaticText(mBottomPanel, wxID_ANY, wxT("Welcome to Gimmick!")); + bottom_sizer->Add(mText,0,wxGROW,0); + + + mBottomPanel->SetSizer(bottom_sizer); // Splitting @@ -374,7 +378,7 @@ namespace creaImageIO bool valid = ValidateSelected(sel, mSelectionMinDimension, mSelectionMaxDimension ); - mText->SetLabel(_T("Status: ")+crea::std2wx(GetMessage())); + mText->SetLabel(crea::std2wx(GetMessage())); if(valid) { ReadImageThreaded(sel); @@ -475,6 +479,8 @@ namespace creaImageIO while (!IsQueueEmpty()) { + mViewer->StartPlayer(); + GimmickDebugMessage(5, "Queue not empty" <StartPlayer(); if (mViewer->RefreshIfNecessary()) { // mViewer->Refresh(); diff --git a/src2/creaImageIOWxViewer.cpp b/src2/creaImageIOWxViewer.cpp index 2b473a2..8639888 100644 --- a/src2/creaImageIOWxViewer.cpp +++ b/src2/creaImageIOWxViewer.cpp @@ -81,11 +81,8 @@ namespace creaImageIO mCurrent = 0; - mPlayer = new WxViewerPlayer(this); //images, mViewer, mInteractor, this); - - mPlayer->Create(); - mPlayer->Run(); - + mPlayer = 0; + topsizer-> Add( mInteractor ,1,wxGROW ,0); SetSizer( topsizer ); Layout(); @@ -164,13 +161,13 @@ namespace creaImageIO void WxViewer::ShowNextImage() { - wxMutexLocker lock(mMutex); + wxMutexLocker lock(mMutex); - /* - GimmickMessage(1,"WxViewer::ShowNextImage() " + + GimmickMessage(10,"WxViewer::ShowNextImage() " <GetSpacing(spx,spy,spz); im->GetExtent (x1,x2,y1,y2,z1,z2); - /* - std::cout << "-----------------------------"<GetRenderer()->ComputeVisiblePropBounds(bounds); - /* - std::cout <<"bounds : "<GetRenderer()->ResetCameraClippingRange(bounds); - /* - vtkCamera *camera = mViewer->GetRenderer()->GetActiveCamera(); - - camera->SetViewUp ( spx*0, -spy*1, spz*0); - camera->SetPosition( spx*(x1+x2)/2, spy*(y1+y2)/2, spz*10000000); - camera->SetFocalPoint ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*0); - - camera->ComputeViewPlaneNormal(); - camera->SetParallelScale( spx*(x2-x1)/2.0 ); - - camera->Roll ( 180 ); - */ + } - // mInteractor->Refresh(); - //mInteractor->Render(); - // mViewer->Render(); - //::wxWakeUpIdle(); + } //================================================================ @@ -302,9 +271,24 @@ namespace creaImageIO //================================================== void WxViewer::StopPlayer() { - mPlayer->Delete(); + wxMutexLocker lock(mMutex); + if (mPlayer==0) return; + mPlayer->Delete(); + mPlayer=0; } - + + //================================================== + void WxViewer::StartPlayer() + { + // wxMutexLocker lock(mMutex); + if (mPlayer != 0) return; + mPlayer = new WxViewerPlayer(this); + mPlayer->Create(); + mPlayer->Run(); + } + + + // BEGIN_EVENT_TABLE(WxGimmickFrame, wxDialog) @@ -324,40 +308,16 @@ namespace creaImageIO { GimmickMessage(1,"WxViewerPlayer::Entry()"<ShowNextImage(); - // mWxViewer->Refresh(); ::wxWakeUpIdle(); clock_t endwait; endwait = clock () + 0.2 * CLOCKS_PER_SEC ; while (clock() < endwait) {} - } - else - { - break; - } - /* - for(i=mImagesToPlay.begin();i!=mImagesToPlay.end();++i) - { - if(i!=mImagesToPlay.end()) - { - - GimmickMessage(1,"ThreadedMovie next image"<Refresh(); - endwait = clock () + 0.2 * CLOCKS_PER_SEC ; - while (clock() < endwait) {} - - - } - */ } return 0; } diff --git a/src2/creaImageIOWxViewer.h b/src2/creaImageIOWxViewer.h index aa0079c..dff169d 100644 --- a/src2/creaImageIOWxViewer.h +++ b/src2/creaImageIOWxViewer.h @@ -50,6 +50,8 @@ namespace creaImageIO void OnInternalIdle(); + void StartPlayer(); + void StopPlayer(); bool RefreshIfNecessary(); -- 2.45.1