Unsolved Guard sentinels for slots?
-
Back in the Qt4 days I occasionally ran across references that recommended a guard around slots to prohibit the slot from being recursively called. Here's a quick implementation:
MyQObject::MySlot() { static bool inSlot(false); // probably better to make this a member variable if (!inSlot) { inSlot = true; // *** do important slot stuff *** // maybe emit signals that in a round-about way // cause this slot to be executed again? inSlot = false; } }
Is this still a thing? Does Qt5 have any internal checks to make this kind of blocking redundant? Being an admittedly paranoid person, I still frequently do this to protect from signal/slot loops causing a stack overflow.
What's the best practice and caveats these days?
-
@Kent-Dorfman said in Guard sentinels for slots?:
Does Qt5 have any internal checks to make this kind of blocking redundant?
I don't think so.
The techniques you used in Qt 4 are still valid for Qt 5.
-
@Kent-Dorfman
As @JKSH says you are still responsible for writing explicit code if you want this check. Doubtless you're well aware already, but (a) you could have this in debug/development code only if you trust to skip it in production and (b) personally in some shape or form I'd implement via, say, a function-scoped local variable whose constructor sets and destructor clears theinSlot
so that you don't have to worry about putting areturn
in the middle of your code or an exception being raised etc.