* Add NativeThreadInfo
+ use in Message
+ test with PatternFormatter
* Fix NativeThreadInfo for glibc without gettid
* add new file to make
* chore: formatting
* fix(NativeThreadinfo): name and id #3333
* fix(NativeThread): add OS includes #3333
* fix(Message): use OS thread ID for non-POCO threads #3333
Fix Message initialization to correctly handle thread IDs for both POCO
and non-POCO threads. When Thread::current() returns null (std::thread,
main thread, etc.), use NativeThreadInfo to get the OS thread ID instead
of leaving _tid as zero.
Rename NativeThreadInfo::id() to NativeThreadInfo::osTid() to match the
Thread::currentOsTid() naming convention and clarify that both return
the same kernel-level thread identifier (not the POCO sequential ID).
Additional changes:
- Add comprehensive documentation to NativeThreadInfo explaining its
purpose and when to use it vs Thread::current()
- Fix LoggerTest warning by removing pessimizing std::move in return
- Update all platform implementations (POSIX, WIN32, WINCE, VxWorks)
This ensures the %I format specifier in PatternFormatter shows:
- POCO thread ID (1, 2, 3...) for Poco::Thread instances
- OS thread ID for non-POCO threads (std::thread, main thread, etc.)
* fix(LoggerTest): compare thread ID against actual value #3333
testFormatThreadName was failing in CI because it expected the POCO
thread ID to be 1, but in a full test run, many threads are created
before this test (by ThreadingTestSuite, etc.), resulting in higher IDs.
The test now compares against the actual thread's ID (thr.id()) instead
of a hard-coded value, making it robust regardless of test order.
* fix(NativeThreadInfo): windows compile #3333
* fix(NativeThreadInfo): mac compile fail; consolidate platform pthread functions selection #3333
* fix(NativeThreadInfo): use UTF8 #3333
* fix: remove NativeThreadInfo (not needed) #3333
* fix(Thread): proper UTF-8 handling and test robustness #3333
- Thread_WIN32: Use MultiByteToWideChar with CP_UTF8 in setCurrentNameImpl
instead of byte-by-byte iterator copy. The old conversion was incorrect
for non-ASCII characters (e.g., Japanese thread names).
- LoggerTest: Add bounds check (parts.size() >= 5) before accessing vector
elements to prevent undefined behavior if log message format is unexpected.
* fix(Message): disable thread name on platforms that don't have it #3333
* fix(Thread): make getCurrentName/setCurrentName always available #3333
Move POCO_NO_THREADNAME guard inside inline implementations instead of
around declarations. This ensures the API is always available on all
platforms, returning empty string or no-op on platforms without thread
name support (e.g., emscripten, AIX).
Update Message.cpp to remove conditional compilation since the functions
are now unconditionally available.
* fix(Thread): Windows backward compatibility and code cleanup #3333
Thread_WIN32.cpp:
- Use dynamic loading for SetThreadDescription/GetThreadDescription
via GetProcAddress for compatibility with pre-Windows 10 1607
- setCurrentNameImpl tries modern API first, falls back to legacy
exception method (0x406D1388) for older Windows/debuggers
- Remove redundant processthreadsapi.h and stringapiset.h includes
(already included via windows.h)
LoggerTest.cpp:
- Simplify loop condition (remove redundant npos check)
- Fix code style (braces on new lines)
---------
Co-authored-by: Olivier Smeesters <osm@idirect.net>
* sample(DBLogger): New sample to demonstrate DB logging to a file. (#4750)
* sample(DBLogger): Create messages via SQL logger in a thread (#4750)
* sample(DBLogger): Save messages from SQL files to an SQL database (works with SQLite) (#4750)
* chore(Makefile): Data samples depend on PocoUtil (#4750)
* sample(DBLogger): Refactored DBLogger with std::filesystem::directory_iterator and std::thread.
* sample(DBLogger): Add missing include <condition_variable>
* sample(DBLogger): Extracted log scanning and inserting functionality to class SQLLogInserter.
* sample(DBLogger): Create new logging table only when using demo messages option.
* feat(DBLogger): VS projects
* sample(DBLogger): Acquire options from configuration file.
* feat(DBLogger): regenerate VS projects (progen file change)
* sample(DBLogger): Add example DBLogger.properties file.
* sample(DBLogger): Process as much as possible when stopping processing.
* sample(DBLogger): Meaningful defaults in properties file.
* sample(DBLogger): Verify validity of database session on startup.
* sample(DBLogger): Configure demo SQL channel in properties file.
* chore(DBLogger): style and warnings
---------
Co-authored-by: Aleksandar Fabijanic <aleks-f@users.noreply.github.com>
Co-authored-by: Alex Fabijanic <alex@pocoproject.org>
* Remove _WIN32_WCE macro
Poco now use C++17 and Windows CE does not support it and VS2017 does
also not support it so we can just remove Windows CE code. First remove
all macro usages from our own files.
* Remove WinCE support from build files
Poco now use C++17 and Windows CE does not support it and VS2017 does
also not support it so we can just remove Windows CE code. Remove all
references from build systems / scripts.
* Remove Windows CE related source and header files
Poco now use C++17 and Windows CE does not support it and VS2017 does
also not support it so we can just remove Windows CE code. First remove
all macro usages from our own files.
* Remove wcelibcex folder
Poco now use C++17 and Windows CE does not support it and VS2017 does
also not support it so we can just remove Windows CE code. First remove
all macro usages from our own files.
* Remove rest Windows CE mentions
There where some Windows CE mentions left. Remove those.
* Update Windows CE documentation
We should keep documentation some time so people can find reason for
remove.
---------
Co-authored-by: Kari Argillander <kari.argillander@fidelix.com>
* MongoDB::PooledConnection: Prevent unwanted release by disabling copy semantics. Enabled move semantics for C++11.
* Construct MongoDB::Cursor from aggragation cursor.
* Added function to get OS-specific numerical thread ID and %J pattern to use numerical OS thread id in pattern formatter.
Co-authored-by: Tomaz Beltram <tomaz.beltram@topit.si>