Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Recent
    • Tags
    • Users
    • Login

    Async Rendering Thread

    Scheduled Pinned Locked Moved SDK Help
    3 Posts 0 Posters 329 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H Offline
      Helper
      last edited by

      THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

      On 20/11/2009 at 12:17, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   11.528 
      Platform:   Windows  ;   
      Language(s) :     C++  ;

      ---------
      I'm trying to run a render asynchronously in the background, much like C4D's Make Preview command. I've got the render running in a separate thread, but it seems a Wait command is necessary to get the thread to process the render. Once I add the Wait though, it locks the GUI. I've found several examples here for synchronous render processes, but none for async renders. My (simplified) code is below. Any tips?

        
      class AlioSeqThread : public C4DThread   
      {   
           private:   
                BaseDocument* m_doc;   
                BaseBitmap* m_bmp;   
                BaseContainer rdbc;   
                AlioSeqProgressData pd;   
        
           public:   
                AlioSeqThread(BaseDocument* adoc, BaseBitmap* abmp, BaseContainer bc, AlioSeqProgressData apd) { m_doc = adoc; m_bmp = abmp; rdbc = bc; pd = apd;} //constructor   
                virtual ~AlioSeqThread() { m_doc = NULL; m_bmp = NULL; End(); Wait(FALSE); StatusClear();} //destructor   
                virtual void Main(void);   
                virtual Bool TestDBreak();   
                virtual const CHAR *GetThreadName(void) { return "AlioSeqThread"; }   
      };   
        
      void AlioSeqThread::Main(void) {   
           LONG result = RenderDocument(m_doc, rdbc, AlioSeqProgressHook, &pd;, m_bmp, RENDERFLAG_EXTERNAL|RENDERFLAG_SHOWERRORS, this->Get());   
      }   
        
      Bool AlioSeqThread::TestDBreak() {   
           BaseContainer keyinput;   
           if(GetInputEvent(BFM_INPUT_KEYBOARD, keyinput) && (keyinput.GetLong(BFM_INPUT_CHANNEL) == KEY_ESC)) GePrint("esc");   
           return (GetInputEvent(BFM_INPUT_KEYBOARD, keyinput) && (keyinput.GetLong(BFM_INPUT_CHANNEL) == KEY_ESC));   
      }   
        
      class AlioRenderSeqCommand : public CommandData   
      {   
           public:   
        
                virtual Bool Execute(BaseDocument *doc) {   
                    BaseDocument *rdoc = (BaseDocument* )doc->GetClone(COPY_DOCUMENT, NULL);   
                    AlioSeqThread ast(rdoc, bmp, rdbc, pd);   
                    ast.Start(TRUE, THREADPRIORITY_BELOW);   
                    ast.Wait(TRUE);   
                    BaseDocument::Free(rdoc);   
                    return TRUE;   
                }   
      
      1 Reply Last reply Reply Quote 0
      • H Offline
        Helper
        last edited by

        THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

        On 10/02/2010 at 15:14, xxxxxxxx wrote:

        Still having trouble finding a way to RenderDocument without locking the GUI. Any help?

        1 Reply Last reply Reply Quote 0
        • H Offline
          Helper
          last edited by

          THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

          On 10/02/2010 at 23:03, xxxxxxxx wrote:

          I see two problems.

          First, you're freeing the document right after you started the render. if it's asynchronous the render will get a problem as it is still rendering while you free the document.

          Second, you should not create an instance of the Thread Object on the stack as it also gets freed right after the Execute function returns. that way the TestBreak() function is called in the Destructor i guess.

          1 Reply Last reply Reply Quote 0
          • First post
            Last post