OpenForcal的运行机制

1、OpenForcal提供给主调程序和扩展动态库的功能

    比较OpenForcal和它的扩展动态库的输出函数,发现绝大多数输出函数的功能几乎完全相同。的确如此,在主调程序中通过向OpenForcal注册函数可以实现的功能,在扩展动态库中完全可以实现;同样,在主调程序中可以编译(ComFor)和执行(ExeFor)源程序,在扩展动态库中也完全可以。但OpenForcal提供给主调程序和扩展动态库的功能并不完全相同。在主调程序中,可以对OpenForcal进行初始化、更改设置(SetOpenFcSet)、重新加载动态库说明文件(LoadDllFunFile)以及获得或设置主调程序的初始化信息等,这些功能在扩展动态库中无法实现,但其余的功能二者完全相同。

2、执行结果的输出

    这里的输出仅仅包括每一个整数、实数和复数表达式的计算结果的输出,以及主调程序和扩展动态库向OpenForcal发送的所有信息的输出。
    程序
执行的结果并不一定要在主调程序中输出,也可以将结果输出到任何一个扩展动态库。实际上,无论是主调程序还是扩展动态库,谁向OpenForcal提出了编译的请求并且编译成功,执行结果就输出给谁,因为编译(ComFor)函数的参数中需要指定输出函数。

3、OpenForcal对多线程的支持

    OpenForcal对来自主调程序和扩展动态库的函数调用提供了多线程的支持,这里主要指的是编译和执行源程序的函数,特别对执行函数还提供了多种执行方式。通常,在源程序中使用某个动态库中向OpenForcal注册的函数就可以启动该动态库中的某个线程,线程启动后,就与其他的线程同步工作。在任意的时刻,任何一个线程都可以向OpenForcal发送编译和执行命令,OpenForcal将根据实际情况作出不同的处理,具体请参考编译(ComFor)和执行(ExeFor)函数的说明。
    需要说明的是,任何一个编译请求,都会使OpenForcal丢弃以前的编译结果。如果一定要保留以前的编译结果,则只能启动该程序的另一个实例。

4、在哪里实现函数的功能

    由于在主调程序中可以实现的函数功能,在扩展动态库中也完全可以实现,那么究竟在哪里实现比较合适呢?很难明确回答这个问题,在这里,仅列举一些基本的原则作为参考:
    (1)纯粹的数值计算函数宜在扩展动态库中实现;
    (2)较为通用的窗口函数功能宜在扩展动态库中启动另一个线程实现;
    (3)面向某一方面的复杂功能宜在主调函数中实现。