Met threads kan je inderdaad dingen tegelijkertijd uitvoeren, maar volgens mij gaat dit het probleem van de TS niet oplossen. Hij gebruikt namelijk "cin" en, voor zover ik weet,blijft dat ook bij het gebruik van threads eeuwig wachten op invoer.
Onderstaande code lijkt toch te lukken? Ik zie het probleem niet eigenlijk? De thread
zal de applicatie afsluiten na 10 seconden en de main thread zal de thread stoppen indien
de gebruiker een 1 ingeeft. Het is natuurlijk wel de bedoeling de thread te starten voor
het cin commando, anders kan je inderdaad eeuwen wachten.
[cpp]#include <windows.h>
#include <stdio.h>
#include <time.h>
#include <iostream>
using namespace std;
void wait(int seconds);
DWORD WINAPI terminate(LPVOID Param); // zo moet elke thread functie eruitzien (functienaam mag
// natuurlijk verschillen
int main(void)
{
int Controle_Afsluiten = 0;
int Controle = 0;
DWORD ThreadId; // zal de id van de thread opslaan
HANDLE Thread_Handle; // zal gebruikt worden om de thread af te sluiten
cout << "Typ 5 om af te sluiten: ";
cin >> Controle_Afsluiten;
/*er wordt 5 ingegeven*/
if (Controle_Afsluiten == 5)
{
Thread_Handle = CreateThread(
NULL, // maak gebruik van de default veiligheidsattributen
0, // default stack grootte
terminate, // functie die de thread zal uitvoeren
NULL, // parameter van de functie (geen parameter nodig hier)
0, // default thread creation flags
&ThreadId); // zal thread Id teruggeven
cout << "U koos voor afsluiten, typ '1' om te annuleren!\n";
cin >> Controle;
if(Controle == 1)
{
TerminateThread(Thread_Handle, 0);
cout << "afsluiten geannuleerd.\n";
while(true)
{
// ga verder
cout << "GO\n";
wait(10);
}
}
}
}
DWORD WINAPI terminate(LPVOID Param)
{
wait(10);
exit(0);
}
void wait ( int seconds )
{
clock_t endwait;
endwait = clock() + seconds * CLOCKS_PER_SEC;
while (clock() < endwait);
}
[/cpp]
nieke_e zei:
Oh? Zou je dat willen uitleggen? Ik heb er zelf namelijk nooit problemen mee ondervonden
Hmja misschien een iets te persoonlijke mening en het is daarbovenop lang geleden dat ik boost gebruikt heb, Thread termination was bijvoorbeeld een 'pain in the ass'. Maarja *forget it.
Btw: Een fork() zou ook kunnen lukken, het heeft zo zijn voordelen en nadelen.
Bij een "normale" fork wordt een volledig nieuw proces gestart, terwijl dit niet het geval is bij een thread, in theorie
zou het childproces van een fork dus kunnen blijven lopen terwijl het moederproces crashed, het is wel belastender
voor het systeem.