Render DeadLock

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

On 13/11/2006 at 20:22, xxxxxxxx wrote:

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

---------
Hi all ...

Now I'm trying to render in a thread and it's working fine ...
But when I break the render using ESC key and try to stop the rendering thread using End function ... C4D stops responding ... So I think it's a deadlock situation ...
In the help file ... it's said ...

**
void End(void)
Ends the thread. This function will not return before the thread has completely stopped.
Note: If the thread does not check for TestBreak() then this function will not return until the thread has finished work and you might get into a deadlock situation.
**

I surely check for TestBreak ... but I got a deadlock ...
So how can I stop the thread?

Thanks in adnvance ...
Zaw Min Tun

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

On 16/11/2006 at 00:32, xxxxxxxx wrote:

Try placing a breakpoint on TestBreak()==TRUE, to see if your code ever gets there.

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

On 16/11/2006 at 19:41, xxxxxxxx wrote:

Sure ...

In thread's Main ...

I check like this ...

void myThread::Main(void)
{
   while(IsRunning())
   {
      if(TestBreak())
        End();
   }
}

So we can assume that the thread has already ended after the break ...
But after the redner has stopped because of the break or ESC ... I check if the thread is running using IsRunning ... I found that the thread is still running ...

So I try to End it again and then I fall into a deadlock ... So now I don't try to End it again after the break ... The code is working ...
But I'm still confused ...

Thanks a lot for your concern ... Mikael ...

Zaw Min Tun

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

On 23/11/2006 at 13:04, xxxxxxxx wrote:

You should not call End() when TestBreak() returns TRUE, but simply exit your main function. Otherwise your loop will continue calling End() forever.

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

On 24/11/2006 at 18:15, xxxxxxxx wrote:

So what I should do is like below?

void myThread::Main(void)
{
   while(IsRunning())
   {
      if(TestBreak())
        return;
   }
}

I'll try it ...

Thanks & regards
Zaw Min Tun

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

On 24/11/2006 at 18:26, xxxxxxxx wrote:

Wowwwww ...

It's great ...
Now it's working in the way I want ...
No more memory leaks ... more stable ...
Thanks a lot ... Mikael ...

With best regards ...
Zaw Min Tun