#include <windows.h>
#include <process.h>
#include <stdio.h>
//#include "try1.h"
//#include "try2.h"
//#include "try3.h"
#include "solution.h"
Singleton::Singleton()
{
printf("Singleton 0x%08X has been allocated by tid %d\n",
this, ::GetCurrentThreadId());
Sleep(1000); // Simulate a long operation.
state = 0xABCD; // Initialize dummy state.
printf("Singleton 0x%08X -state initialized by tid %d\n",
this, ::GetCurrentThreadId());
}
void Singleton::show_state()
{
printf("show_state(): this=0x%08X state=0x%04X tid=%d\n",
this, state, ::GetCurrentThreadId());
}
void join(long thread_handle)
{
// Join with thread.
WaitForSingleObject(reinterpret_cast<HANDLE>(thread_handle),
INFINITE);
}
void thread2(void*)
{
printf("thread2 tid is %d\n", ::GetCurrentThreadId());
Singleton::instance().show_state();
}
int main(void)
{
printf("main tid is %d\n", ::GetCurrentThreadId());
long spawned_thread = _beginthread(thread2, 0, NULL);
Singleton::instance().show_state();
join(spawned_thread);
Singleton::instance().show_state();
return 0;
}