Print

 

Подскажите, пожалуйста, используете ли вы какие-нибудь альтернативы стандартной функции Print ? Может, есть более быстрые или удобные варианты? Уверен, что кто-то уже оптимизировал вывод, не хочется тратить время на "велосипед".


// LogPrint.mqh
#ifndef __LOGPRINT_MQH__
#define __LOGPRINT_MQH__
#define LOG LogPrint(__FILE__,__LINE__,StringFormat(
// GlobalVariable name for logging control
#define LOGGING_CONTROL_VAR "EnableLogging"

// Function to initialize the logging system
void InitLogging(bool enableLogging) {
    if (!GlobalVariableCheck(LOGGING_CONTROL_VAR)) {
        // Set the initial state based on the parameter
        if (enableLogging) {
            GlobalVariableSet(LOGGING_CONTROL_VAR, 1.0); // Enable logging
        } else {
            GlobalVariableSet(LOGGING_CONTROL_VAR, 0.0); // Disable logging
        }
    } else {
        // If the variable exists, update it to the user's choice
        GlobalVariableSet(LOGGING_CONTROL_VAR, enableLogging ? 1.0 : 0.0);
    }
}

// Function to enable logging globally
void EnableLogging() {
    GlobalVariableSet(LOGGING_CONTROL_VAR, 1.0);
}

// Function to disable logging globally
void DisableLogging() {
    GlobalVariableSet(LOGGING_CONTROL_VAR, 0.0);
}

// Function to get the current logging state
bool IsLoggingEnabled() {
    return GlobalVariableGet(LOGGING_CONTROL_VAR) == 1.0;
}

// Custom Print function that checks logging state
void LogPrint(const string file, const int line, const string message) {
    if (IsLoggingEnabled()) {
        // Extract the file name from the full path
        string fileName = file;
        int lastSlash = StringFind(file, "\\", StringLen(file) - 1);
        if (lastSlash >= 0) {
            fileName = StringSubstr(file, lastSlash + 1);
        }

        // Construct the full message with File and Line info
        string fullMessage = StringFormat("[File: %s | Line: %d] %s", fileName, line, message);

        // Print the complete message
        Print(fullMessage);
    }
}


#endif // __LOGPRINT_MQH__
 
Насколько помню писали, что запись в файл быстрее чем Print().
Даже с учётом того, что файл надо открыть, закрыть для одиночной записи.
А при массовых записях за один подход, можно один раз открыть файл, записать циклом и закрыть файл.
Если важна точность вывода информации, то лучше писать в файл.