added wxCondition test

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13920 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2002-01-29 22:50:27 +00:00
parent 547b93ab04
commit 2f2f3e2ab7

View File

@ -89,8 +89,7 @@
#undef TEST_ALL
static const bool TEST_ALL = TRUE;
#else
#define TEST_HASHMAP
#define TEST_FILENAME
#define TEST_THREADS
static const bool TEST_ALL = FALSE;
#endif
@ -4599,7 +4598,7 @@ void MyDetachedThread::OnExit()
gs_cond.Signal();
}
void TestDetachedThreads()
static void TestDetachedThreads()
{
puts("\n*** Testing detached threads ***");
@ -4625,7 +4624,7 @@ void TestDetachedThreads()
puts("");
}
void TestJoinableThreads()
static void TestJoinableThreads()
{
puts("\n*** Testing a joinable thread (a loooong calculation...) ***");
@ -4637,7 +4636,7 @@ void TestJoinableThreads()
(unsigned long)thread.Wait());
}
void TestThreadSuspend()
static void TestThreadSuspend()
{
puts("\n*** Testing thread suspend/resume functions ***");
@ -4676,7 +4675,7 @@ void TestThreadSuspend()
puts("");
}
void TestThreadDelete()
static void TestThreadDelete()
{
// As above, using Sleep() is only for testing here - we must use some
// synchronisation object instead to ensure that the thread is still
@ -4732,6 +4731,92 @@ void TestThreadDelete()
puts("");
}
// wxCondition test code
// ----------------------------------------------------------------------------
class MyWaitingThread : public wxThread
{
public:
MyWaitingThread(wxCondition *condition)
{
m_condition = condition;
Create();
}
virtual ExitCode Entry()
{
printf("Thread %lu has started running.", GetId());
fflush(stdout);
gs_cond.Signal();
printf("Thread %lu starts to wait...\n", GetId());
fflush(stdout);
m_condition->Wait();
printf("Thread %lu finished to wait, exiting.\n", GetId());
fflush(stdout);
return 0;
}
private:
wxCondition *m_condition;
};
static void TestThreadConditions()
{
wxCondition condition;
// create and launch threads
MyWaitingThread *threads[2];
size_t n;
for ( n = 0; n < WXSIZEOF(threads); n++ )
{
threads[n] = new MyWaitingThread(&condition);
}
for ( n = 0; n < WXSIZEOF(threads); n++ )
{
threads[n]->Run();
}
// wait until all threads run
printf("Main thread is waiting for the threads to start: ");
fflush(stdout);
size_t nRunning = 0;
while ( nRunning < WXSIZEOF(threads) )
{
gs_cond.Wait();
putchar('.');
fflush(stdout);
nRunning++;
}
puts("\nMain thread: all threads started up.");
fflush(stdout);
// now wake them up
#if 0
printf("Main thread: about to signal the condition.\n");
fflush(stdout);
condition.Signal();
#endif // 0
printf("Main thread: about to broadcast the condition.\n");
fflush(stdout);
condition.Broadcast();
// give them time to terminate (dirty)
wxThread::Sleep(300);
}
#endif // TEST_THREADS
// ----------------------------------------------------------------------------
@ -5502,18 +5587,15 @@ int main(int argc, char **argv)
if ( nCPUs != -1 )
wxThread::SetConcurrency(nCPUs);
if ( argc > 1 && argv[1][0] == 't' )
wxLog::AddTraceMask("thread");
if ( 1 )
if ( 0 )
{
TestDetachedThreads();
if ( 1 )
TestJoinableThreads();
if ( 1 )
TestThreadSuspend();
if ( 1 )
TestThreadDelete();
}
TestThreadConditions();
#endif // TEST_THREADS
#ifdef TEST_LONGLONG