2016-11-03 1 views
0

私は次のようにC++で記述されたDLLがあります。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; 
} 
関連する問題