POCO | |
---|---|
Type | bibliotek (programmering) |
Skrevet i | C++03, delvist overført til C++11 |
Operativ system | Cross platform |
nyeste version | 1.10.1 (10. februar 2020) |
Licens | Boost-softwarelicens |
Internet side | pocoproject.org |
POCO (eller C++ Portable Components) er en samling af open source - klassebiblioteker , der forenkler og fremskynder udviklingen af webbaserede multi -platform applikationer i C++. Bibliotekerne integreres godt med Standard Template Library (STL) og udfylder problemfrit mange funktionelle huller i det. Den modulære struktur og effektive implementering gør POCO til en ideel kandidat til udvikling af indlejrede enheder ( firmware , etc.), et område, hvor C++ bliver mere og mere populært, da det er velegnet til både lavt niveau ( I/O-enheder ,interrupt handlers osv.) og til objektorienteret udvikling på højt niveau . POCO er naturligvis også velegnet til virksomhedsapplikationsudvikling .
POCO-biblioteker frigør udvikleren fra at skulle genimplementere almindelige opgaver, der kan føre til slåfejl , unøjagtig implementering af specifikationer og forkert fejlhåndtering.
POCO er designet til netværksbaserede C++-softwarepakker med flere platforme , såsom Apples Cocoa til Mac OS X eller Ruby on Rails til webudvikling . Det var udtænkt som en kraftfuld, men brugervenlig platform .
POCO er bygget med streng overholdelse af ANSI/ISO C++-standarden, som inkluderer standardbiblioteket. Versioner 1.x bruger C++ 2003-standarden (begynder med version 1.4.7, C++ 2011 er delvist understøttet), version 2.x forbereder en fuldstændig overgang til C++ 2011-standarden og slutningen af understøttelse af compilere, der ikke understøtter denne standard. POCO-udviklere stræber efter at finde en balance mellem at bruge komplekse C++-mekanismer og at holde klasser og kode klare og enkle.
POCO lanceres på forskellige platforme, herunder:
Før version 1.4.0 bruger POCO-netværksundersystemet til Linux som standard det valgte systemkald, som ikke skaleres godt til høje belastninger. Der er implementeringer af dette undersystem ved hjælp af poll eller epoll [1] opkald . De er designet til at overvinde den valgte grænse på det maksimale filbeskrivelsesnummer (normalt 1024). I applikationer, der bruger POCO og betjener titusindvis af klienter på samme tid, kan brugen af select føre til lammelsesangreb og nedbrud af applikationen - både poll og epoll-implementeringer løser dette problem.
Fra version 1.4.0 bruges epoll-implementeringen som standard til at bygge i Linux-miljøer:
POCO C++ biblioteker, udgivelsesbemærkninger , SF 2977249 :
Brug epoll i stedet for select på Linux. Metoderne Poco::Net::Socket::select() og Poco::Net::Socket::poll() bruger epoll under Linux, hvis netbiblioteket er kompileret med flaget -DPOCO_HAVE_FD_EPOLL. Denne konfiguration er standard for Linux, men ikke for forskellige indlejrede Linux-platforme.
Originaltekst (engelsk)[ Visskjule] fast SF# 2977249: Brug epoll i stedet vælg under Linux Poco::Net::Socket::select() og Poco::Net::Socket::poll() vil bruge epoll under Linux, hvis Net-biblioteket er kompileret med -DPOCO_HAVE_FD_EPOLL . Dette er standarden for Linux build-konfigurationen (men ikke for de forskellige build-konfigurationer rettet mod indlejrede Linux-platforme).1) Installer biblioteket: Pak ud (for eksempel til C:\Poco) og indstil to stier i miljøvariablerne:
2) Byg biblioteket: Åbn C:\Poco\bin\Foundation_vs80.sln og byg det, få C:\Poco\bin\PocoFoundation.dll
3) Åbn eksemplet (overvej Logger): C:\Poco\Foundation\samples\Logger\Logger_vs80.vcproj
//Fil Logger.cpp ved hjælp af Poco :: Logger ; ved hjælp af Poco :: PatternFormatter ; ved hjælp af Poco :: FormattingChannel ; ved hjælp af Poco :: ConsoleChannel ; ved hjælp af Poco :: FileChannel ; bruger Poco :: Besked ; int main ( int argc , char ** argv ) { // opsæt to kanalkæder - en til //-konsollen og den anden til en logfil. FormattingChannel * pFCConsole = new FormattingChannel ( ny PatternFormatter ( "%s:%p:%t" )); pFCConsole -> setChannel ( ny ConsoleChannel ); pFCConsole -> åben (); FormattingChannel * pFCFile = new FormattingChannel ( ny PatternFormatter ( "%Y-%m-%d %H:%M:%S.%c %N[%P]:%s:%q:%t" )); pFCFile -> setChannel ( ny FileChannel ( "sample.log" )); pFCFile -> åben (); // opret to Logger-objekter - et til // hver kanalkæde. Logger & consoleLogger = Logger :: create ( "ConsoleLogger" , pFCConsole , Message :: PRIO_INFORMATION ); Logger & fileLogger = Logger :: create ( "FileLogger" , pFCFile , Message :: PRIO_WARNING ); // log nogle meddelelser consoleLogger . error ( "En fejlmeddelelse" ); fileLogger . error ( "En fejlmeddelelse" ); consoleLogger . advarsel ( "En advarselsmeddelelse" ); fileLogger . fejl ( "En advarsel" ); consoleLogger . information ( "En informationsmeddelelse" ); fileLogger . information ( "En informationsmeddelelse" ); Logger :: get ( "ConsoleLogger" ). error ( "En anden fejlmeddelelse" ); returnere 0 ; }------------- Resultat af betjening (på skærmen) -------------
ConsoleLogger: Fejl: En fejlmeddelelse ConsoleLogger: Advarsel: En advarselsmeddelelse ConsoleLogger: Information: En informationsmeddelelse ConsoleLogger: Fejl: Endnu en fejlmeddelelse------------- Resultatet af arbejdet (i sample.log-filen) --------------
2007-10-11 10:12:19.8 WKS-323[1204]:FileLogger:E:En fejlmeddelelse 2007-10-11 10:12:19.9 WKS-323[1204]:FileLogger:E:En advarselsmeddelelse 2007-10-11 10:12:23.5 WKS-323[312]:FileLogger:E:En fejlmeddelelse 2007-10-11 10:12:23.6 WKS-323[312]:FileLogger:E:En advarselsmeddelelse