<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[AccessViolation in hausgemachter Threadklasse]]></title><description><![CDATA[<p>Hi zusammen,</p>
<p>im Moment habe ich ds Problem, dass aus einem firmeneigenen ( mittlerweile nicht mehr benutzen Klasse ) Tool, eine städnig auftretende AccessViolation rauszusuchen und zu beheben..</p>
<p>nach mehrfachem Tracking mit AQTime5 und setzen von tausenden CriticalSections und auskommentierung von Tonnen von Sourcecode, bin ich mittlerweile der überzeugung, dass der fehler irgendwo tief drin sitzen muss... die vermutung liegt dabei im moment auf der selbstgebackenen threadklasse... vielleicht findet ja jemand was..</p>
<p>danke</p>
<pre><code>#include &lt;sysutils.hpp&gt;
#pragma hdrstop
#include &lt;thread.h&gt;
#include &lt;util.h&gt;
#include &lt;kernel.h&gt;
#include &lt;process.h&gt;
#include &lt;typeinfo.h&gt;
#include &quot;klog.h&quot;

//------------------------------------------------------------------------------
// namespace kernel
//------------------------------------------------------------------------------
namespace kernel
{
//------------------------------------------------------------------------------
// constants
//------------------------------------------------------------------------------
const size_t MAX_THREAD_QUEUE_SIZE= 64;
//------------------------------------------------------------------------------
// global variables
//------------------------------------------------------------------------------
static critical_section  Thread_Synch;
static CThread*          Thread_StartQueue[MAX_THREAD_QUEUE_SIZE];
static size_t            Thread_StartQueueSize= 0;
static unsigned long     Thread_Instance      = 0;

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
bool __thread_queue_thread(CThread* thread)
{
  if (Thread_StartQueueSize&lt;MAX_THREAD_QUEUE_SIZE)
  {
    Thread_StartQueue[Thread_StartQueueSize++]= thread;
    return true;
  }
  else return false;
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
void __thread_start_queued_threads()
{
  for (size_t i= 0; i&lt;Thread_StartQueueSize; ++i)
    if (Thread_StartQueue[i]-&gt;GetThreadState()==thrdInactive) Thread_StartQueue[i]-&gt;Start();

  Thread_StartQueueSize= 0;
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
CThread::CThread()
  : ThreadState(thrdInactive),
    TerminationSignaled(false),
    hThread(INVALID_HANDLE_VALUE),
    ThreadID(0)
{
  blockguard  lock(Thread_Synch);

  Instance= ++Thread_Instance;
  klog(&quot;THREAD&quot;, &quot;CThread ctor called (%lu)&quot;, Instance);
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
CThread::~CThread()
{
  klog(&quot;THREAD&quot;, &quot;CThread dtor called (%lu)&quot;, Instance);
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
DWORD CThread::GetID() const
{
  return ThreadID;
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
HANDLE CThread::GetHandle() const
{
  return hThread;
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
EThreadState CThread::GetThreadState() const
{
  //blockguard  lock(thread_synch);

  return ThreadState;
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
bool CThread::IsTerminated() const
{
  return GetThreadState()==thrdTerminated;
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
bool CThread::IsSignaled() const
{
  //blockguard  lock(thread_synch);

  return TerminationSignaled;
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
bool CThread::Start(EThreadPriority priority)
{
  //blockguard  lock(thread_synch);

  if (ThreadState!=thrdInactive &amp;&amp; ThreadState!=thrdTerminated) return false;
  else
  {
    if (hThread!=INVALID_HANDLE_VALUE) CloseHandle(hThread);
    TerminationSignaled= false;
    ThreadState        = thrdActive;

    hThread= (HANDLE) _beginthreadNT(&amp;CThread::_thread_thunk, 4096, this, 0, 0, &amp;ThreadID);

    if (hThread==INVALID_HANDLE_VALUE)
    {
      ThreadState= thrdInactive;
      klog(&quot;THREAD&quot;, &quot;thread launch failed (%lu)\nOS Error=%s&quot;, Instance, oserr_to_str(GetLastError()).c_str());
    }
    else
    {
      SetThreadPriority(hThread, priority);
      klog(&quot;THREAD&quot;, &quot;thread successfully launched, tid=%lu, priority=%i (%lu)&quot;, ThreadID, GetThreadPriority(hThread), Instance);
    }
    return hThread!=INVALID_HANDLE_VALUE;
  }
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
void CThread::Terminate()
{
  blockguard  lock(thread_synch);

  if (ThreadState==thrdInactive) ThreadState= thrdTerminated;
  TerminationSignaled= true;
  ReleaseWaitState();
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
bool CThread::Suspend()
{
  blockguard  lock(thread_synch);

  if (ThreadState==thrdActive &amp;&amp; SuspendThread(hThread)!=0xFFFFFFFFUL)
  {
    ThreadState= thrdSuspended;
    return true;
  }
  else return false;
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
bool CThread::Resume()
{
  blockguard  bg(thread_synch);

  if (ThreadState==thrdSuspended &amp;&amp; ResumeThread(hThread)!=0xFFFFFFFFUL)
  {
    ThreadState= thrdActive;
    return true;
  }
  else return false;
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
bool CThread::Kill()
{
  return TerminateThread(hThread, 0);
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
DWORD CThread::SetIdealProcessor(DWORD processor)
{
  return SetThreadIdealProcessor(hThread, processor);
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
DWORD CThread::SetAffinityMask(DWORD affinity_mask)
{
  return SetThreadAffinityMask(hThread, affinity_mask);
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
bool CThread::WaitForTermination(DWORD timeout)
{
  if (GetThreadState()==thrdActive)
  {
    klog(&quot;THREAD&quot;, &quot;waiting for thread termination, tid=%lu (%lu)&quot;, ThreadID, Instance);
    if (WaitForSingleObject(hThread, timeout)==WAIT_OBJECT_0) return true;
  }
  return GetThreadState()==thrdTerminated;
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
bool CThread::TerminateAndWait(DWORD timeout)
{
  Terminate();
  return WaitForTermination(timeout);
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
EThreadPriority CThread::GetPriority() const
{
  return (EThreadPriority) GetThreadPriority(hThread);
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
bool CThread::SetPriority(EThreadPriority priority)
{
  return SetThreadPriority(hThread, priority);
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
DWORD CThread::GetExitCode()
{
  DWORD  exit_code;

  GetExitCodeThread(hThread, &amp;exit_code);
  return exit_code;
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
void CThread::ReleaseWaitState()
{}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
void _USERENTRY CThread::_thread_thunk(void* obj)
{
  FILETIME        ft_creation, ft_exit, ft1, ft2;
  CThread         *thread;
  unsigned  long  instance;

  Sleep(5);
  thread  = static_cast&lt;CThread*&gt;(obj);
  instance= thread-&gt;Instance;
  try
  {
    klog(&quot;THREAD&quot;, &quot;thread starts, tid=%lu (%lu)&quot;, GetCurrentThreadId(), instance);

    thread-&gt;Execute();
    thread-&gt;thread_synch.enter();
    thread-&gt;ThreadState= thrdTerminated;
    thread-&gt;thread_synch.leave();

    GetThreadTimes(GetCurrentThread(), &amp;ft_creation, &amp;ft_exit, &amp;ft1, &amp;ft2);
    klog(&quot;THREAD&quot;, &quot;thread terminates (%lu)\nstatistics: created=%s&quot;, instance, filetime_to_str(ft_creation).c_str());
  }
  catch (const Exception&amp; e)
  {
    GetThreadTimes(GetCurrentThread(), &amp;ft_creation, &amp;ft_exit, &amp;ft1, &amp;ft2);
    klog( &quot;THREAD&quot;, &quot;EXCEPTION detected: '%s' (%lu)\nstatistics: created=%s&quot;,
          e.Message.c_str(), instance, filetime_to_str(ft_creation).c_str());

    signal_process_termination(-99);
  }
  catch (const std::exception&amp; se)
  {
    GetThreadTimes(GetCurrentThread(), &amp;ft_creation, &amp;ft_exit, &amp;ft1, &amp;ft2);
    klog( &quot;THREAD&quot;, &quot;EXCEPTION detected: type '%s' (%lu)\n%s\nstatistics: created=%s&quot;,
          typeid(se).name(), instance, se.what(), filetime_to_str(ft_creation).c_str());
    signal_process_termination(-98);
  }
  catch (...)
  {
    GetThreadTimes( GetCurrentThread(), &amp;ft_creation, &amp;ft_exit, &amp;ft1, &amp;ft2);
    klog( &quot;THREAD&quot;, &quot;EXCEPTION detected: unknown type (%lu)\nstatistics: created=%s&quot;,
          instance, filetime_to_str(ft_creation).c_str());
    signal_process_termination(-97);
  }
  _endthread();
}

} // namespace kernel
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/167461/accessviolation-in-hausgemachter-threadklasse</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 04:47:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/167461.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 11 Dec 2006 12:52:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to AccessViolation in hausgemachter Threadklasse on Mon, 11 Dec 2006 12:52:49 GMT]]></title><description><![CDATA[<p>Hi zusammen,</p>
<p>im Moment habe ich ds Problem, dass aus einem firmeneigenen ( mittlerweile nicht mehr benutzen Klasse ) Tool, eine städnig auftretende AccessViolation rauszusuchen und zu beheben..</p>
<p>nach mehrfachem Tracking mit AQTime5 und setzen von tausenden CriticalSections und auskommentierung von Tonnen von Sourcecode, bin ich mittlerweile der überzeugung, dass der fehler irgendwo tief drin sitzen muss... die vermutung liegt dabei im moment auf der selbstgebackenen threadklasse... vielleicht findet ja jemand was..</p>
<p>danke</p>
<pre><code>#include &lt;sysutils.hpp&gt;
#pragma hdrstop
#include &lt;thread.h&gt;
#include &lt;util.h&gt;
#include &lt;kernel.h&gt;
#include &lt;process.h&gt;
#include &lt;typeinfo.h&gt;
#include &quot;klog.h&quot;

//------------------------------------------------------------------------------
// namespace kernel
//------------------------------------------------------------------------------
namespace kernel
{
//------------------------------------------------------------------------------
// constants
//------------------------------------------------------------------------------
const size_t MAX_THREAD_QUEUE_SIZE= 64;
//------------------------------------------------------------------------------
// global variables
//------------------------------------------------------------------------------
static critical_section  Thread_Synch;
static CThread*          Thread_StartQueue[MAX_THREAD_QUEUE_SIZE];
static size_t            Thread_StartQueueSize= 0;
static unsigned long     Thread_Instance      = 0;

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
bool __thread_queue_thread(CThread* thread)
{
  if (Thread_StartQueueSize&lt;MAX_THREAD_QUEUE_SIZE)
  {
    Thread_StartQueue[Thread_StartQueueSize++]= thread;
    return true;
  }
  else return false;
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
void __thread_start_queued_threads()
{
  for (size_t i= 0; i&lt;Thread_StartQueueSize; ++i)
    if (Thread_StartQueue[i]-&gt;GetThreadState()==thrdInactive) Thread_StartQueue[i]-&gt;Start();

  Thread_StartQueueSize= 0;
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
CThread::CThread()
  : ThreadState(thrdInactive),
    TerminationSignaled(false),
    hThread(INVALID_HANDLE_VALUE),
    ThreadID(0)
{
  blockguard  lock(Thread_Synch);

  Instance= ++Thread_Instance;
  klog(&quot;THREAD&quot;, &quot;CThread ctor called (%lu)&quot;, Instance);
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
CThread::~CThread()
{
  klog(&quot;THREAD&quot;, &quot;CThread dtor called (%lu)&quot;, Instance);
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
DWORD CThread::GetID() const
{
  return ThreadID;
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
HANDLE CThread::GetHandle() const
{
  return hThread;
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
EThreadState CThread::GetThreadState() const
{
  //blockguard  lock(thread_synch);

  return ThreadState;
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
bool CThread::IsTerminated() const
{
  return GetThreadState()==thrdTerminated;
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
bool CThread::IsSignaled() const
{
  //blockguard  lock(thread_synch);

  return TerminationSignaled;
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
bool CThread::Start(EThreadPriority priority)
{
  //blockguard  lock(thread_synch);

  if (ThreadState!=thrdInactive &amp;&amp; ThreadState!=thrdTerminated) return false;
  else
  {
    if (hThread!=INVALID_HANDLE_VALUE) CloseHandle(hThread);
    TerminationSignaled= false;
    ThreadState        = thrdActive;

    hThread= (HANDLE) _beginthreadNT(&amp;CThread::_thread_thunk, 4096, this, 0, 0, &amp;ThreadID);

    if (hThread==INVALID_HANDLE_VALUE)
    {
      ThreadState= thrdInactive;
      klog(&quot;THREAD&quot;, &quot;thread launch failed (%lu)\nOS Error=%s&quot;, Instance, oserr_to_str(GetLastError()).c_str());
    }
    else
    {
      SetThreadPriority(hThread, priority);
      klog(&quot;THREAD&quot;, &quot;thread successfully launched, tid=%lu, priority=%i (%lu)&quot;, ThreadID, GetThreadPriority(hThread), Instance);
    }
    return hThread!=INVALID_HANDLE_VALUE;
  }
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
void CThread::Terminate()
{
  blockguard  lock(thread_synch);

  if (ThreadState==thrdInactive) ThreadState= thrdTerminated;
  TerminationSignaled= true;
  ReleaseWaitState();
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
bool CThread::Suspend()
{
  blockguard  lock(thread_synch);

  if (ThreadState==thrdActive &amp;&amp; SuspendThread(hThread)!=0xFFFFFFFFUL)
  {
    ThreadState= thrdSuspended;
    return true;
  }
  else return false;
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
bool CThread::Resume()
{
  blockguard  bg(thread_synch);

  if (ThreadState==thrdSuspended &amp;&amp; ResumeThread(hThread)!=0xFFFFFFFFUL)
  {
    ThreadState= thrdActive;
    return true;
  }
  else return false;
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
bool CThread::Kill()
{
  return TerminateThread(hThread, 0);
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
DWORD CThread::SetIdealProcessor(DWORD processor)
{
  return SetThreadIdealProcessor(hThread, processor);
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
DWORD CThread::SetAffinityMask(DWORD affinity_mask)
{
  return SetThreadAffinityMask(hThread, affinity_mask);
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
bool CThread::WaitForTermination(DWORD timeout)
{
  if (GetThreadState()==thrdActive)
  {
    klog(&quot;THREAD&quot;, &quot;waiting for thread termination, tid=%lu (%lu)&quot;, ThreadID, Instance);
    if (WaitForSingleObject(hThread, timeout)==WAIT_OBJECT_0) return true;
  }
  return GetThreadState()==thrdTerminated;
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
bool CThread::TerminateAndWait(DWORD timeout)
{
  Terminate();
  return WaitForTermination(timeout);
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
EThreadPriority CThread::GetPriority() const
{
  return (EThreadPriority) GetThreadPriority(hThread);
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
bool CThread::SetPriority(EThreadPriority priority)
{
  return SetThreadPriority(hThread, priority);
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
DWORD CThread::GetExitCode()
{
  DWORD  exit_code;

  GetExitCodeThread(hThread, &amp;exit_code);
  return exit_code;
}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
void CThread::ReleaseWaitState()
{}

//------------------------------------------------------------------------------
// Function
//------------------------------------------------------------------------------
void _USERENTRY CThread::_thread_thunk(void* obj)
{
  FILETIME        ft_creation, ft_exit, ft1, ft2;
  CThread         *thread;
  unsigned  long  instance;

  Sleep(5);
  thread  = static_cast&lt;CThread*&gt;(obj);
  instance= thread-&gt;Instance;
  try
  {
    klog(&quot;THREAD&quot;, &quot;thread starts, tid=%lu (%lu)&quot;, GetCurrentThreadId(), instance);

    thread-&gt;Execute();
    thread-&gt;thread_synch.enter();
    thread-&gt;ThreadState= thrdTerminated;
    thread-&gt;thread_synch.leave();

    GetThreadTimes(GetCurrentThread(), &amp;ft_creation, &amp;ft_exit, &amp;ft1, &amp;ft2);
    klog(&quot;THREAD&quot;, &quot;thread terminates (%lu)\nstatistics: created=%s&quot;, instance, filetime_to_str(ft_creation).c_str());
  }
  catch (const Exception&amp; e)
  {
    GetThreadTimes(GetCurrentThread(), &amp;ft_creation, &amp;ft_exit, &amp;ft1, &amp;ft2);
    klog( &quot;THREAD&quot;, &quot;EXCEPTION detected: '%s' (%lu)\nstatistics: created=%s&quot;,
          e.Message.c_str(), instance, filetime_to_str(ft_creation).c_str());

    signal_process_termination(-99);
  }
  catch (const std::exception&amp; se)
  {
    GetThreadTimes(GetCurrentThread(), &amp;ft_creation, &amp;ft_exit, &amp;ft1, &amp;ft2);
    klog( &quot;THREAD&quot;, &quot;EXCEPTION detected: type '%s' (%lu)\n%s\nstatistics: created=%s&quot;,
          typeid(se).name(), instance, se.what(), filetime_to_str(ft_creation).c_str());
    signal_process_termination(-98);
  }
  catch (...)
  {
    GetThreadTimes( GetCurrentThread(), &amp;ft_creation, &amp;ft_exit, &amp;ft1, &amp;ft2);
    klog( &quot;THREAD&quot;, &quot;EXCEPTION detected: unknown type (%lu)\nstatistics: created=%s&quot;,
          instance, filetime_to_str(ft_creation).c_str());
    signal_process_termination(-97);
  }
  _endthread();
}

} // namespace kernel
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1190080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1190080</guid><dc:creator><![CDATA[VariousArtists]]></dc:creator><pubDate>Mon, 11 Dec 2006 12:52:49 GMT</pubDate></item><item><title><![CDATA[Reply to AccessViolation in hausgemachter Threadklasse on Mon, 11 Dec 2006 12:54:48 GMT]]></title><description><![CDATA[<p>Warum benutzt du nicht einfach den Debugger?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1190084</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1190084</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Mon, 11 Dec 2006 12:54:48 GMT</pubDate></item><item><title><![CDATA[Reply to AccessViolation in hausgemachter Threadklasse on Mon, 11 Dec 2006 12:57:39 GMT]]></title><description><![CDATA[<p>Bei AccessViolations in Kombination mt Threads kannst du mit Borland selber nur den CPU-CallStack &quot;debuggen&quot;... und da nützliche Infos über die Fehlerquelle zu finden ist praktisch unmöglich leider..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1190085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1190085</guid><dc:creator><![CDATA[VariousArtists]]></dc:creator><pubDate>Mon, 11 Dec 2006 12:57:39 GMT</pubDate></item><item><title><![CDATA[Reply to AccessViolation in hausgemachter Threadklasse on Tue, 12 Dec 2006 06:36:20 GMT]]></title><description><![CDATA[<p>Unsinn! Scroll mal im Stackwindow das aufgeht (CPU als Titelleiste) nach oben. Und auch wenn du den Callingstack anschaust, dann siehst du da, wo er hergekommen ist (ist ja der Witz am Callingstack) da wird wohl eine Funktion von dir zu finden sein.</p>
<p>Ansonsten schmeiss hald Breakpoints in sämtliche Threadfunktionen und steppe sie einzeln durch, damit du rausfindest wo dass die Exception ausgelöst wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1190362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1190362</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Tue, 12 Dec 2006 06:36:20 GMT</pubDate></item><item><title><![CDATA[Reply to AccessViolation in hausgemachter Threadklasse on Tue, 12 Dec 2006 09:10:12 GMT]]></title><description><![CDATA[<p>Sorry, aber kein Unsinn... mit AQTime5 ( Profilertool ) seh ich ja den CallStack, aber der fliegt bei jeder Exception an einer anderen Stelle... dazu muss ich sagen, dass es in diesem fall sehr schwierig ist, immer gleiche Testdaten bereitzustellen...</p>
<p>Deshalb habe ich ja die Vermutung das es der Thread ist.. die einzige Gemeinsamkeit beim CallStack ist halt dass sie nur fliegt, sobald mehr als 1 Thread + WinMain Thread laufen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1190430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1190430</guid><dc:creator><![CDATA[VariousArtists]]></dc:creator><pubDate>Tue, 12 Dec 2006 09:10:12 GMT</pubDate></item></channel></rss>