我有一个用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);
}
我的问题是:我的想法可行吗?有没有其他方法可以满足我的需求?
答案 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;
}