f0rtex
04-10-2004, 10:21
Hi folks!
Folgendes Programm bereitet mir Kopfzerbrechen:
#include <boost/thread/thread.hpp>
#include <boost/thread/xtime.hpp>
#include <iostream>
using namespace std;
struct thread_alarm
{
thread_alarm(int secs) : m_secs(secs)
{
cout << "Konstruktor" << endl;
}
~thread_alarm()
{
cout << "Destruktor" << endl;
}
void operator()()
{
boost::xtime xt;
boost::xtime_get(&xt, boost::TIME_UTC);
xt.sec += m_secs;
boost::thread::sleep(xt);
std::cout << "alarm sounded..." << std::endl;
}
int m_secs;
};
int main(int argc, char* argv[])
{
int secs = 5;
std::cout << "setting alarm for 5 seconds..." << std::endl;
thread_alarm alarm(secs);
boost::thread thrd(alarm);
thrd.join();
}
Und die Ausgabe dazu:
$ $ g++ -D_REENTRANT boost_org.cpp -lboost_thread
$ ./a.out
setting alarm for 5 seconds...
Konstruktor
Destruktor
Destruktor
Destruktor
Destruktor
alarm sounded...
Destruktor
Destruktor
$
Wieso wird bei diesem simplen Bsp. der Destruktor 6 Mal aufgerufen?
Und was geschieht mit den Membervariablen?
Danke im Voraus
MfG
f0rtex
Folgendes Programm bereitet mir Kopfzerbrechen:
#include <boost/thread/thread.hpp>
#include <boost/thread/xtime.hpp>
#include <iostream>
using namespace std;
struct thread_alarm
{
thread_alarm(int secs) : m_secs(secs)
{
cout << "Konstruktor" << endl;
}
~thread_alarm()
{
cout << "Destruktor" << endl;
}
void operator()()
{
boost::xtime xt;
boost::xtime_get(&xt, boost::TIME_UTC);
xt.sec += m_secs;
boost::thread::sleep(xt);
std::cout << "alarm sounded..." << std::endl;
}
int m_secs;
};
int main(int argc, char* argv[])
{
int secs = 5;
std::cout << "setting alarm for 5 seconds..." << std::endl;
thread_alarm alarm(secs);
boost::thread thrd(alarm);
thrd.join();
}
Und die Ausgabe dazu:
$ $ g++ -D_REENTRANT boost_org.cpp -lboost_thread
$ ./a.out
setting alarm for 5 seconds...
Konstruktor
Destruktor
Destruktor
Destruktor
Destruktor
alarm sounded...
Destruktor
Destruktor
$
Wieso wird bei diesem simplen Bsp. der Destruktor 6 Mal aufgerufen?
Und was geschieht mit den Membervariablen?
Danke im Voraus
MfG
f0rtex