我正在制作一个必须响应应用程序请求的 dll。应用程序的要求之一是调用不应花费很长时间才能完成。
比如说,我有一个函数 foo(),它被主机应用程序调用:
int foo(arg){
// some code i need to execute, say,
LengthyRoutine();
return 0;
}
比方说,foo 必须执行一项肯定需要很长时间的任务(或调用一个函数)。该应用程序允许我设置一个等待变量;如果当 foo 返回时这个变量不为零,它会一次又一次地调用 foo(在每次调用之前重置 wait 变量)直到 wait 返回 0。
最好的方法是什么?
我去吗:
int foo(arg){
if (inRoutine == TRUE) {
wait = 1;
return 0;
} else {
if (doRoutine == TRUE) {
LengthyRoutine();
return 0;
}
}
return 0;
}
这并不能真正解决 LengthyRoutine 需要很长时间才能完成的问题。我是否应该生成某种线程,根据它是否完成任务来更新 inRoutine?
谢谢..
最佳答案
产生另一个线程几乎是最好的方法,只需确保在设置表示您已完成的变量之前设置结果变量即可避免竞争条件。如果经常调用它,您可能希望提前生成工作线程并重用它以避免线程启动开销。
还有另一种可能的解决方案,每次调用函数时都做部分工作,但是这会在 DLL 中花费更多时间并且可能不是最优的,而且对于大多数算法来说实现工作代码也更加复杂.
关于c++ - 如何避免阻塞(C++、Win32),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/657141/