release
This commit is contained in:
39
ultimateteknotool.v2/debug_console/debugconsole.cpp
Normal file
39
ultimateteknotool.v2/debug_console/debugconsole.cpp
Normal file
@ -0,0 +1,39 @@
|
||||
#include "pch.h"
|
||||
#include "debugconsole.h"
|
||||
|
||||
#ifdef UTT2_DEBUG
|
||||
std::once_flag WinConsoleW::m_createonceflag;
|
||||
std::unique_ptr<WinConsoleW> WinConsoleW::m_pInstance;
|
||||
std::wofstream WinConsoleW::m_woutstream;
|
||||
|
||||
WinConsoleW::WinConsoleW()
|
||||
{
|
||||
if (::AllocConsole() == TRUE)
|
||||
{
|
||||
this->m_woutstream.open("CONOUT$", std::wofstream::out);
|
||||
std::wcout.rdbuf(this->m_woutstream.rdbuf());
|
||||
}
|
||||
else
|
||||
{
|
||||
if (::AttachConsole(::GetCurrentProcessId()))
|
||||
{
|
||||
this->m_woutstream.open("CONOUT$", std::wofstream::out);
|
||||
std::wcout.rdbuf(this->m_woutstream.rdbuf());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
WinConsoleW& WinConsoleW::Console()
|
||||
{
|
||||
std::call_once(WinConsoleW::m_createonceflag, [] {
|
||||
WinConsoleW::m_pInstance.reset(new WinConsoleW);
|
||||
});
|
||||
return *WinConsoleW::m_pInstance.get();
|
||||
}
|
||||
|
||||
WinConsoleW::~WinConsoleW()
|
||||
{
|
||||
::FreeConsole();
|
||||
}
|
||||
|
||||
#endif
|
42
ultimateteknotool.v2/debug_console/debugconsole.h
Normal file
42
ultimateteknotool.v2/debug_console/debugconsole.h
Normal file
@ -0,0 +1,42 @@
|
||||
#pragma once
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <windows.h>
|
||||
#define UTT2_DEBUG
|
||||
|
||||
#ifdef UTT2_DEBUG
|
||||
class WinConsoleW
|
||||
{
|
||||
private:
|
||||
static std::wofstream m_woutstream;
|
||||
WinConsoleW();
|
||||
static std::once_flag m_createonceflag;
|
||||
static std::unique_ptr<WinConsoleW> m_pInstance;
|
||||
WinConsoleW(const WinConsoleW&) = delete;
|
||||
WinConsoleW(WinConsoleW&&) = delete;
|
||||
WinConsoleW& operator=(const WinConsoleW&) = delete;
|
||||
WinConsoleW& operator=(WinConsoleW&&) = delete;
|
||||
public:
|
||||
~WinConsoleW();
|
||||
static WinConsoleW& Console();
|
||||
void print() {
|
||||
std::wcout << std::endl;
|
||||
}
|
||||
template <typename T> void print(const T& t) {
|
||||
std::wcout << t << std::endl;
|
||||
}
|
||||
template <typename First, typename... Rest> void print(const First& first, const Rest&... rest) {
|
||||
std::wcout << first;
|
||||
print(rest...); // recursive call using pack expansion syntax
|
||||
}
|
||||
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef UTT2_DEBUG
|
||||
#define WCWOUT WinConsoleW::Console().print
|
||||
#else
|
||||
#define WCWOUT //WinConsoleW::Console().print
|
||||
#endif
|
13
ultimateteknotool.v2/debug_console/pch.h
Normal file
13
ultimateteknotool.v2/debug_console/pch.h
Normal file
@ -0,0 +1,13 @@
|
||||
// pch.h: это предварительно скомпилированный заголовочный файл.
|
||||
// Перечисленные ниже файлы компилируются только один раз, что ускоряет последующие сборки.
|
||||
// Это также влияет на работу IntelliSense, включая многие функции просмотра и завершения кода.
|
||||
// Однако изменение любого из приведенных здесь файлов между операциями сборки приведет к повторной компиляции всех(!) этих файлов.
|
||||
// Не добавляйте сюда файлы, которые планируете часто изменять, так как в этом случае выигрыша в производительности не будет.
|
||||
|
||||
#ifndef PCH_H
|
||||
#define PCH_H
|
||||
|
||||
// Добавьте сюда заголовочные файлы для предварительной компиляции
|
||||
#include "framework.h"
|
||||
|
||||
#endif //PCH_H
|
Reference in New Issue
Block a user