SOLVED R20 equivalent of GeSignal

Hello.

In Cinema 4D R19, I was using GeSignal instead of while/GeSleep to "wake up" a thread.
Which is the equivalent in maxon API ?

Thank you.

Hello,

to "wake" a thread one should use a condition variable. You find information in the Condition Variables Manual. General information on threading with the MAXON API is found here: MAXON API Threading.

best wishes,
Sebastian

Hello and thank you very much for the help.

It appears that I cannot use it in a custom thread that inherits C4DThread.
I have a private member maxon::ConditionVariableRef, but the following call fails compilation:
condition = maxon::ConditionVariableRef::Create();

Do I have to use it only in a thread inheriting maxon::ThreadInterfaceTemplate<ExampleThread> ?

Thank you.

@peterakos said in R20 equivalent of GeSignal:

I have a private member maxon::ConditionVariableRef, but the following call fails compilation:
condition = maxon::ConditionVariableRef::Create();

Hello,

what compilation error exactly do you get?

Hello.

Here is the error:
error C2679: binary '=': no operator found which takes a right-hand operand of type 'maxon::ResultMemTmaxon::ConditionVariableRef' (or there is no acceptable conversion)

note: could be 'maxon::ConditionVariableInterface::Reference &maxon::ConditionVariableInterface::Reference::operator =(const maxon::ConditionVariableInterface::Reference &)'
note: or 'maxon::ConditionVariableInterface::Reference &maxon::ConditionVariableInterface::Reference::operator =(maxon::ConditionVariableInterface::Reference &&)

I have used it exactly as in ConditionVariable manual, but the thread is C4DThread instead of maxon::ThreadInterfaceTemplate<ExampleThread>.

Thank you.

Hi Peterakos, thanks for following up.

It seems that the issue you're reporting is related to the fact that you're not properly handling the result of the BaseRef::Create() with the usual error handling means.

Please check Error handling in our the C++ API Documentation.

Best, Riccardo

Hello.

The problem was that I didn't add the definitions.

iferr_scope;
signal = maxon::ConditionVariableRef::Create() iferr_return;

Thank you for your time and sorry for that 😞