我应该在DLL的函数内使用静态变量吗?

时间:2016-11-03 06:12:43

标签: c++ dll static-variables

我有一个用C ++编写的DLL,如下所示:

extern "C" __declspec(dllexport) int GetConfig(const char* param_name)
{
    MyConfig config;
    config.LoadConfigFromFile("conf.ini");
    return config.get_config(param_name);
}

不同进程经常调用GetConfig(const char* )LoadConfigFromFile( )非常昂贵,所以我想制作一些静态的东西,例如:

extern "C" __declspec(dllexport) int GetConfig(const char* param_name)
{
    static MyConfig config;
    if(!config.HasLoaded())
    {
        config.LoadConfigFromFile("conf.ini");
    }
    return config.get_config(param_name);
}

我的问题是:我的想法可行吗?有没有其他方法可以满足我的需求?

1 个答案:

答案 0 :(得分:0)

不幸的是,这不是你问题的直接答案,但是你提出了实现需求的替代方法,这可能会有所帮助。

#include <windows.h>
#include <stdio.h>
#include <ctime>

using namespace std;

int main()
{
    HANDLE _configfile;
    FILETIME _configFileTimeCreate, _configFileTimeModified;
    SYSTEMTIME _systemUTC;

    time_t start_time = time(NULL);
    for (;;)
    {
        time_t now = time(NULL);
        time_t diff = now - start_time;

        if ((diff % 10) == 0) {

            _configfile = CreateFile(L"config.txt", GENERIC_READ, FILE_SHARE_READ,  NULL,  OPEN_EXISTING,  FILE_ATTRIBUTE_NORMAL, NULL);

            if(_configfile == INVALID_HANDLE_VALUE) {
                printf("Could not open file, error %ul\n", GetLastError());
                return -1;
            }

            if(!GetFileTime(_configfile, &_configFileTimeCreate, NULL, &_configFileTimeModified)) {
                printf("Something wrong!\n");
                return FALSE;
            } 
            else {
                FileTimeToSystemTime(&_configFileTimeModified, &_systemUTC);
                printf("UTC System Time format:\n");
                printf("Modified on: %02d/%02d/%d %02d:%02d\n", _systemUTC.wDay, _systemUTC.wMonth, _systemUTC.wYear,
                                                               _systemUTC.wHour, _systemUTC.wMinute);
            }

            CloseHandle(_configfile);
        }
        Sleep(1000);
    }

    return 0;
}