[C] Nieuw proces starten

Status
Niet open voor verdere reacties.

Rimsic

Terugkerende gebruiker
Lid geworden
15 jan 2005
Berichten
3.143
Hallo,

Ik heb een vraag wat betreft C. Ik wil in een programma geschreven in C aanpassen. Er moet op bepaalde momenten data naar een database. Ik wil niet dat het bestaande programma hier hinder van ondervind qua tijd. Ik zoek daarom een oplossing om een soort van een nieuw proces te starten die parallel naast het bestaande programma draait. Het bestaande programma zou dan wel data naar het nieuwe proces moeten kunnen verzenden zonder dat het programma hoeft te wachten voordat het is verwerkt.

Wie heeft een tip hoe ik dit aan kan pakken of een andere oplossing?

Alvast bedankt
 
Ik zou wat gaan Googlen naar "C threads".
Als je binnen een programma een nieuwe thread start dan zal deze telkens heel vaak een heel klein beetje van de processortijd krijgen, waardoor het lijkt alsof het hoofdprogramma en deze thread 'tegelijkertijd' lopen. Hierdoor zal bijvoorbeeld de GUI blijven reageren, ook al is het programma (op een aparte thread) nog bezig met een database query.

Threads zijn helaas wel een aardig ingewikkeld topic, waarbij je vooral goed op moet letten dat verschillende threads niet tegelijkertijd aan het zelfde stukje geheugen zitten, want dan gaat het vaak fout.
 
Arjan, bedankt voor je reactie.

Ik ben inderdaad bekend met threads. Is het niet zo omdat er steeds geswitcht wordt tussen de threads dat het uiteindelijk langer duurt? Ik heb een test gedaan met 3 'for loops' laten draaien die een heleboel (lees miljoenen) keer een karakter op het scherm print. De variant waar elke for loop in een thread werd gestart duurde dit ongeveer 130 - 140 seconden. En de variant waar alle drie de for loops achter elkaar liet lopen zat dit rond de 70 seconden.

Het probleem is dat het hoofd programma geen hinder mag ondervinden van het schrijven naar de database (dit gaat om honderdste van seconden). Ik zit ook te denken aan een client / server structuur d.m.v. een socket. Waar het hoofdprogramma de client is en een bericht stuurt naar het programma dat de database query's uitvoert... maar of dit het hoofdprogramma verstoort weet ik niet.
 
Die extra overhead is wel aanwezig omdat hij telkens een switch moet maken tussen de threads, maar als je dit op een slimme manier aanpakt is het in veel gevallen niet significant.

Als je met een socket een berichtje stuurt naar een ander programma dan werkt het nog vrijwel op dezelfde manier. Het andere programma krijgt ook telkens een klein stukje rekentijd toegewezen door het besturingssysteem.

Als het werkelijk maar om honderdsten van seconden gaat, wat voor hinder ondervindt je programma dan nog? Ik denk niet dat de gebruiker het merkt als de reactie tijd een twintigste seconde langer is.
 
Misschien is het een domme opmerking aangezien ik niet echt bekent ben met c en c++ maar is het een idee om het asynchroon te doen ipv met threads ?
 
Volgensmij heb je daar niks aan. tijdens een asynchrone method call wordt er op de achtergrond een thread gemaakt dacht ik (in c# dan) in c en c++ zal je dit zelf aansturen dus is het feitelijk hetzelfde als losse threads.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan