当前位置:  开发笔记 > 编程语言 > 正文

如何避免阻塞(C++,Win32)

如何解决《如何避免阻塞(C++,Win32)》经验,为你挑选了1个好方法。

我正在制作一个必须响应应用程序请求的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;
}

这并没有真正解决LongyRoutine需要很长时间才能完成的问题.我是否应该生成某种类型的线程,根据它是否已完成其任务,更新inRoutine?

谢谢..



1> Eric..:

产生另一个线程几乎是最好的方法,只需确保在设置表示已完成的变量之前设置结果变量以避免竞争条件.如果经常调用它,您可能希望提前生成工作线程并重用它以避免线程启动开销.

还有另一种可能的解决方案,每次调用函数时都要完成部分工作,但是这会花费更多的时间在DLL中,并且可能不是最优的,并且对于大多数算法实现工作代码更复杂.

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有