2016-11-03 2 views
0

나는 다음과 같이 DLL은 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() 꽤 비싼 내 생각은 가능하다? 내 필요를 채우기위한 대안이 있습니까?

+0

너무 끔찍하고 최적화되지 않았습니다. 그러나 프로그램 동작이 변경 될 수 있습니다. 이전에는 ini를 편집하여 즉시 시작했지만 정적으로 프로그램을 다시 시작해야합니다. – StoryTeller

+0

@StoryTeller 내 경우에는 상관 없습니다. 그럼이 상황을 극복 할 수있는 방법을 말해 주시겠습니까? –

+0

OS를 사용하여 마지막 파일 수정의 타임 스탬프를 가져와 캐시해야합니다. 전체 파일을 읽는 것보다 훨씬 빠르기 때문에 여전히 성능이 향상 될 것입니다. – StoryTeller

답변

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; 
} 
관련 문제