Hinweis: Dies ist die vollständige deutsche Übersetzung des Kapitels. Codebeispiele sind sprachunabhängig gültig.
In diesem Kapitel lernst du einige der fortgeschrittensten Funktionen von Harbour kennen – darunter Multithreading, Webentwicklung mit hbhttpd
, Speicherverwaltung mit Garbage Collector und C-Integration.
Mit hb_threadStart()
kannst du parallele Prozesse starten.
hThread := hb_threadStart( @MeineFunktion(), Parameter1, Parameter2 )
hb_threadJoin( hThread )
Synchronisation erfolgt per hb_mutexCreate()
, hb_mutexLock()
, hb_mutexUnlock()
.
STATIC hMutex := hb_mutexCreate()
hb_mutexLock( hMutex )
nZähler++
hb_mutexUnlock( hMutex )
Harbour enthält mit hbhttpd
einen Webserver. Einfach nutzbar für HTML- oder JSON-Antworten:
hb_httpServer( 8080, @Handler() )
hb_httpSendHeader( hCon, 200, "Content-Type", "text/html" )
hb_httpSendResponse( hCon, "Hallo Welt
" )
Auch REST-APIs mit JSON sind möglich:
hb_httpSendHeader( hCon, 200, "Content-Type", "application/json" )
hb_httpSendResponse( hCon, hb_jsonEncode( { "ok" => .T. } ) )
Harbour verwaltet Speicher automatisch. Der Garbage Collector befreit ungenutzte Variablen.
hb_gcCollect()
– löst manuelle Bereinigung aushb_gcInfo( HB_GC_INFO_MEMORY_USED )
– zeigt SpeicherverbrauchAuch zyklische Referenzen wie oA → oB → oA
werden korrekt erkannt und entfernt.
Du kannst eigene C-Funktionen einbinden:
HB_FUNC( SUMMIERE )
{
if( hb_pcount() == 2 )
hb_retnd( hb_parnd( 1 ) + hb_parnd( 2 ) );
else
hb_ret();
}
Kompiliert und eingebunden via:
hbmk2 meinprog.prg meinmodul.c
Aufruf in Harbour:
? SUMMIERE( 10, 32 ) // ergibt 42
Damit lässt sich Harbour mit nativen Bibliotheken oder eigenen Hochleistungsfunktionen erweitern.