C++调用void类型函数后继续执行前是否需添加执行完成校验?
问题解答
核心结论
不需要额外判断valmis == 1来保证Realtest()执行完成后再走后续逻辑,valmis相关的两行代码都是冗余可删除的。
原因说明
C++默认的普通函数调用是同步阻塞执行的:当你调用Realtest()时,程序会暂停Main()函数的后续执行流程,直到Realtest()内部所有代码完全运行结束,才会继续执行Realtest()调用后的下一行代码。你当前的写法里,if (valmis == 1)这行本身就已经是Realtest()执行完毕后才会运行的逻辑,所以这个判断没有任何作用。
适用特殊场景
只有当你在Realtest()中开启了新线程、用了异步逻辑让Realtest()本身提前返回,实际耗时任务在后台线程运行时,才需要通过状态变量、条件变量等机制判断异步任务是否执行完成。你当前的普通同步调用场景完全不需要这类判断。
内容的提问来源于stack exchange,提问作者Dandeson
相关产品推荐
相关产品推荐

