TCriticalSection并尝试__finally阻止

时间:2013-09-11 13:37:41

标签: c++builder critical-section try-finally

最佳做法是什么(cs是TCriticalSection)

我已经看过很多了

cs->Enter();
try {
}
__finally {
  cs->Leave();
}

但为什么不进入try块中的关键部分?它会引起任何问题吗?

try {
  cs->Enter();
}
__finally {
  cs->Leave();
}

1 个答案:

答案 0 :(得分:2)

除非Leave()成功,否则请勿致电Enter()。如果Enter()失败,则调用Leave()可能会使cs处于错误状态。对于需要使用try..__finally来管理资源的任何代码,这通常应遵循相同的规则。首先分配/获取资源,然后进入try块。或者更改代码以改为使用基于RAII的逻辑或完全使用try..__finally