Stop de functies in 5 minuten als ze niet stoppen met draaien

Ik wil een functie toevoegen aan mijn project.

Ik heb 2 functies in een for-lus omdat ik de oplossing van de functies in willekeurige arrays wil vinden. Ik heb ook een functie die willekeurige arrays maakt. In elke loop is de array die is gemaakt met de random_array-fun de invoer van de 2 functies. De 2 functies printoplossingen op het scherm , ze retourneren geen argument.

int main(){
    for (i=0;i<50 i++)
    {
    arr1=ramdom_array();
    func1(arr1)
    func2(arr1)
    }
}

I need to stop the functions running if they have not ended in 5 minutes. I have thought that I have to put in the functions something like this :

void func1(array,4> initial)
{
while (5minutes_not_passed)
{
//do staff
if(solution==true)
break;
}
}

Maar ik weet niet wat ik in de 5minuten_doorgegeven moet stoppen.

de verklaring van de functies zijn als volgt:

void func1(array,4> initial)
void func2(array,4> initial)

Ik heb geconstateerd dat ik de threadbibliotheek kan gebruiken, maar ik denk niet dat het goed is om in te zoomen op discussielijnen. Ik geloof dat er zoiets als een timer nodig is. Merk op dat de functies soms voor 5 minuten kunnen eindigen.

1
C ++ 11 heeft , C ++ 03 heeft . Afhankelijk van of je timers veel gebruikt, vond ik het gebruik van om een ​​paar timer-lessen een hele leuke activiteit te maken. Ze werken verbazingwekkend goed.
toegevoegd de auteur chris, de bron

4 antwoord

Gebruik time_t en tijd om de huidige seconde te krijgen.

voeg 5 * 60 toe aan die waarde.

in elke iteratie van de lus de tijd , en als het groter is dan of gelijk is aan uw limiet, doorbreken

3
toegevoegd
wat is hier mis mee? time_t thistime; thistime = tijd (NULL); thistime = thistime + 60 * 5; while (time (NULL) <thistime) {// doe het personeel gedurende 5 minuten}
toegevoegd de auteur george mano, de bron

Ik zou aanraden om je functie uit te voeren in een thread met een time-out. Hier is een link naar een vergelijkbare vraag:

C ++: Hoe een time-out voor een willekeurige toepassing implementeren functieaanroep?

0
toegevoegd

Ik weet dat je zei dat je geen threads wilt gebruiken, maar boost :: thread zou dit heel gemakkelijk maken.

boost::thread t(boost::bind(func1, arr1));
if(!t1.timed_join(boost::posix_time::minutes(5))){
   //thread still running, use interrupt or detach
}
0
toegevoegd

Of misschien kunt u zoiets als kevents (freebsd) gebruiken dat een timer-melding heeft en signaalverwerking ook zou werken. http: //www.linuxquestions. org/vragen/programmering-9/how-to-use-SIGUSR1-en-sigusr2-391489/

Dus, na een time-out, zou u een SIGUSR1 naar uw proces moeten sturen en dan zou u in de signaalhandler-functie uw logica kunnen hebben om te verlaten.

0
toegevoegd
Wauw, praat over het gebruik van een H-bom om een ​​mier te doden!
toegevoegd de auteur David Schwartz, de bron
True .. :-) Maar zolang het organisme in kwestie een mier is, en geen kakkerlak..H-bommen..err .. doe het werk! ;-)
toegevoegd de auteur Arvind, de bron