--- nono/host/logger.h 2026/04/29 17:05:51 1.1.1.1 +++ nono/host/logger.h 2026/04/29 17:06:02 1.1.1.3 @@ -18,6 +18,27 @@ class TextScreen; +// ログメッセージ構造 +class LogMsg +{ + public: + enum Type { + Log, + Stdout, + }; + + public: + LogMsg() { + } + LogMsg(Type type_, const std::string& text_) { + type = type_; + text = text_; + } + + Type type {}; + std::string text {}; +}; + // ログは世界が出来る前から(全部終わった最後まで)機能していてほしいため、 // ThreadDevice からの継承はしない。 // ログウィンドウ用のモニタを持つために Object を継承しているが、 @@ -27,7 +48,7 @@ class Logger : public Object, public Thr using inherited = Object; // ログの最大行数。modulo するので 2 のべき乗推奨。 - static const uint maxlines = 64; + static const uint maxlines = 1024; static constexpr uint32 REQ_QUEUE = 0x00000001; static constexpr uint32 REQ_TERMINATE = 0x80000000; @@ -46,13 +67,16 @@ class Logger : public Object, public Thr void TerminateThread(); // 標準出力にも出すかどうか - void UseStdout(bool val) { use_stdout = val; } + void UseStdout(bool val); // ログの表示桁数を変更する。 bool ResizeCol(int); // ログ書き込み。 - void Write(const char *); + void WriteLog(const char *); + + // 標準出力への出力。 + void WriteStdout(const char *); // 表示バッファの有効な行数を返す。 int GetDispLines() const { return displines; } @@ -60,23 +84,25 @@ class Logger : public Object, public Thr Monitor *GetMonitor() const { return monitor; } private: + void OnStart(); void Terminate(); void ThreadRun(); + void DoStdout(const std::string&); void DoLog(const std::string&); void AddLog(const std::string&); void AddDisplay(const std::string&); - DECLARE_MONITOR_CALLBACK(MonitorUpdate); + DECLARE_MONITOR_SCREEN(MonitorScreen); - // ログ受け付けキュー。 - std::deque queue {}; + // ログ・標準出力受け付けキュー。 + std::deque queue {}; // ログ受け付けキューの条件変数。 uint32 request {}; std::mutex queue_mtx {}; std::condition_variable cv {}; - // 標準出力にも出すかどうか + // 標準出力にも出すかどうか。 bool use_stdout {}; // バックログの実体。 @@ -98,7 +124,7 @@ class Logger : public Object, public Thr int displines {}; // UTF-8 -> Shift_JIS 変換関数。(GUI が登録する) - std::string (*utf8_to_sjis_converter)(const std::string&); + std::string (*utf8_to_sjis_converter)(const std::string&) {}; Monitor *monitor {};