POCO (samling av C++-klassbibliotek)

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 17 april 2020; kontroller kräver 6 redigeringar .
POCO
Sorts bibliotek (programmering)
Skrivet i C++03, delvis portad till C++11
Operativ system Cross plattform
senaste versionen 1.10.1 (10 februari 2020)
Licens Boost Software License
Hemsida pocoproject.org

POCO (eller C++ Portable Components) är en samling klassbibliotek med öppen källkod som förenklar och påskyndar utvecklingen av webbaserade multiplattformsapplikationer i C++. Biblioteken integreras väl med Standard Template Library (STL) och fyller sömlöst i många funktionella luckor i det. Den modulära strukturen och effektiva implementeringen gör POCO till en idealisk kandidat för utveckling av inbyggda enheter ( firmware , etc.), ett område där C++ blir mer och mer populärt, eftersom det är lämpligt för både lågnivå ( I/O-enheter , avbrottshanterare etc.) och för objektorienterad utveckling på hög nivå . Naturligtvis är POCO också lämplig för företagsapplikationsutveckling .

POCO-bibliotek frigör utvecklaren från att behöva omimplementera vanliga uppgifter som kan leda till stavfel , felaktig implementering av specifikationer och felaktig felhantering.

Mål och uppdrag

POCO är designad för nätverksanslutna C++-programsviter med flera plattformar som Apples Cocoa för Mac OS X eller Ruby on Rails för webbutveckling . Det var tänkt som en kraftfull men ändå lättanvänd plattform .

POCO är byggt med strikt överensstämmelse med ANSI/ISO C++-standarden, som inkluderar standardbiblioteket. Versioner 1.x använder C++ 2003-standarden (som börjar med version 1.4.7, C++ 2011 stöds delvis), version 2.x förbereder en fullständig övergång till C++ 2011-standarden och slutet av stödet för kompilatorer som inte stöder denna standard. POCO-utvecklare strävar efter att hitta en balans mellan att använda komplexa C++-mekanismer och att hålla klasser och kod tydlig och enkel.

Funktioner

Plattformar och kompatibilitet

POCO lanseras på olika plattformar inklusive:

Före version 1.4.0 använder POCO-nätverksundersystemet för Linux som standard väljarsystemanropet, som inte skalas bra till höga belastningar. Det finns implementeringar av detta delsystem som använder poll eller epoll [1] anrop . De är utformade för att övervinna urvalsgränsen för det maximala fildeskriptornumret (vanligtvis 1024). I applikationer som använder POCO och betjänar tiotusentals klienter samtidigt, kan användningen av select leda till ett överbelastningsskydd och krasch av applikationen - både poll- och epoll-implementationer löser detta problem.
Från och med version 1.4.0 används epoll-implementeringen som standard för att bygga i Linux-miljöer:

POCO C++ Libraries, Release Notes , SF 2977249 :

Använd epoll istället för select på Linux. Metoderna Poco::Net::Socket::select() och Poco::Net::Socket::poll() använder epoll under Linux om nätbiblioteket är kompilerat med flaggan -DPOCO_HAVE_FD_EPOLL. Denna konfiguration är standard för Linux, men inte för olika inbäddade Linux-plattformar.

Originaltext  (engelska)[ visaDölj] fixerad SF# 2977249: Använd epoll istället välj under Linux Poco::Net::Socket::select() och Poco::Net::Socket::poll() kommer att använda epoll under Linux om Net-biblioteket är kompilerat med -DPOCO_HAVE_FD_EPOLL . Detta är standard för Linux-byggkonfigurationen (men inte för de olika byggkonfigurationerna som är inriktade på inbäddade Linux-plattformar).

Användningsexempel (MSVS 8.0)

1) Installera biblioteket: Packa upp (till exempel till C:\Poco) och ställ in två sökvägar i miljövariablerna:

  1. POCO_BASE=C:\Poco
  2. PATH=$(PATH);C:\Poco\bin

2) Bygg biblioteket: Öppna C:\Poco\bin\Foundation_vs80.sln och bygg det, hämta C:\Poco\bin\PocoFoundation.dll

3) Öppna exemplet (tänk på Logger): C:\Poco\Foundation\samples\Logger\Logger_vs80.vcproj

//Fil Logger.cpp med Poco :: Logger ; använder Poco :: PatternFormatter ; använder Poco :: FormattingChannel ; använder Poco :: ConsoleChannel ; använder Poco :: FileChannel ; använder Poco :: Meddelande ; int main ( int argc , char ** argv ) { // sätt upp två kanalkedjor - en till //-konsolen och den andra till en loggfil. FormattingChannel * pFCConsole = new FormattingChannel ( ny PatternFormatter ( "%s:%p:%t" )); pFCConsole -> setChannel ( ny ConsoleChannel ); pFCConsole -> öppna (); FormattingChannel * pFCFile = new FormattingChannel ( ny PatternFormatter ( "%Y-%m-%d %H:%M:%S.%c %N[%P]:%s:%q:%t" )); pFCFile -> setChannel ( ny filkanal ( "sample.log" )); pFCFile -> öppna (); // skapa två Logger-objekt - ett för // varje kanalkedja. Logger & consoleLogger = Logger :: create ( "ConsoleLogger" , pFCConsole , Message :: PRIO_INFORMATION ); Logger & fileLogger = Logger :: create ( "FileLogger" , pFCFile , Message :: PRIO_WARNING ); // logga några meddelanden consoleLogger . error ( "Ett felmeddelande" ); fileLogger . error ( "Ett felmeddelande" ); consoleLogger . warning ( "Ett varningsmeddelande" ); fileLogger . error ( "Ett varningsmeddelande" ); consoleLogger . information ( "Ett informationsmeddelande" ); fileLogger . information ( "Ett informationsmeddelande" ); Logger :: get ( "ConsoleLogger" ). error ( "Ett annat felmeddelande" ); returnera 0 ; }

------------- Resultat av operation (på skärmen) -------------

ConsoleLogger: Fel: Ett felmeddelande ConsoleLogger: Varning: Ett varningsmeddelande ConsoleLogger: Information: Ett informationsmeddelande ConsoleLogger: Fel: Ett annat felmeddelande

------------- Resultatet av arbetet (i sample.log-filen) --------------

2007-10-11 10:12:19.8 WKS-323[1204]:FileLogger:E:Ett felmeddelande 2007-10-11 10:12:19.9 WKS-323[1204]:FileLogger:E:Ett varningsmeddelande 2007-10-11 10:12:23.5 WKS-323[312]:FileLogger:E:Ett felmeddelande 2007-10-11 10:12:23.6 WKS-323[312]:FileLogger:E:Ett varningsmeddelande

Anteckningar

  1. Yatskevich Sergey. PoCo, montering från Spectr Soft (ej tillgänglig länk) (28 augusti 2010). Hämtad 8 oktober 2010. Arkiverad från originalet 11 mars 2012. 

Se även

Länkar