Text archives Help
- From: kmorley@sci.utah.edu
- To: manta@sci.utah.edu
- Subject: [Manta] r1931 - in trunk/Core: Thread Util
- Date: Fri, 14 Dec 2007 17:16:54 -0700 (MST)
Author: kmorley
Date: Fri Dec 14 17:16:54 2007
New Revision: 1931
Modified:
trunk/Core/Thread/Runnable.cc
trunk/Core/Thread/Runnable.h
trunk/Core/Util/Callback.h
trunk/Core/Util/CallbackHelpers.h
Log:
Added RunnableCallback class to make running an arbitrary
function in a thread easier.
Added new static callback for 5 creation time args, 0 calltime.
Modified: trunk/Core/Thread/Runnable.cc
==============================================================================
--- trunk/Core/Thread/Runnable.cc (original)
+++ trunk/Core/Thread/Runnable.cc Fri Dec 14 17:16:54 2007
@@ -43,6 +43,8 @@
#include <Core/Thread/Runnable.h>
#include <Core/Thread/Thread.h>
#include <Core/Thread/ThreadError.h>
+#include <Core/Util/CallbackHelpers.h>
+
namespace Manta {
@@ -57,6 +59,27 @@
if(my_thread_){
throw ThreadError("Runnable is being destroyed while thread is still
running\n");
}
+}
+
+
+
+RunnableCallback::RunnableCallback( CallbackBase_0Data* callback,
+ bool free_callback )
+ : _callback( callback ), _free_callback( free_callback )
+{
+}
+
+
+RunnableCallback::~RunnableCallback()
+{
+ if ( _free_callback )
+ delete _callback;
+}
+
+
+void RunnableCallback::run()
+{
+ _callback->call();
}
Modified: trunk/Core/Thread/Runnable.h
==============================================================================
--- trunk/Core/Thread/Runnable.h (original)
+++ trunk/Core/Thread/Runnable.h Fri Dec 14 17:16:54 2007
@@ -46,6 +46,7 @@
namespace Manta {
class Thread;
+ class CallbackBase_0Data;
/**************************************
@@ -97,6 +98,29 @@
// Cannot copy them
Runnable(const Runnable&);
Runnable& operator=(const Runnable&);
+ };
+
+
+ //
+ // Class to simplify running an arbitrary 0Data callback in a Manta::Thread
+ //
+ class RunnableCallback : public Runnable {
+ public:
+ // Create Runabble for this function. Param free_callback determines
+ // if the RunnableCallback should free the callback object in the
+ // RunnableCallback destructor.
+ RunnableCallback( CallbackBase_0Data* callback, bool free_callback =
true );
+
+ virtual ~RunnableCallback();
+
+ // Simply calls the callback
+ virtual void run();
+
+ private:
+ RunnableCallback() {}
+
+ CallbackBase_0Data* _callback;
+ bool _free_callback;
};
}
Modified: trunk/Core/Util/Callback.h
==============================================================================
--- trunk/Core/Util/Callback.h (original)
+++ trunk/Core/Util/Callback.h Fri Dec 14 17:16:54 2007
@@ -46,6 +46,14 @@
return new Callback_Static_0Data_2Arg<Arg1,Arg2>(pmf, arg1, arg2);
}
+ template<typename Arg1, typename Arg2, typename Arg3, typename Arg4,
typename Arg5> static
+ CallbackBase_0Data*
+ create(void (*pmf)(Arg1, Arg2, Arg3, Arg4, Arg5), Arg1 arg1, Arg2 arg2,
+ Arg3 arg3, Arg4 arg4, Arg5 arg5) {
+ return new Callback_Static_0Data_5Arg<Arg1,Arg2,Arg3,Arg4,Arg5>(
+ pmf, arg1, arg2, arg3, arg4, arg5);
+ }
+
// 1 Data
template<typename Data1> static
CallbackBase_1Data<Data1>*
Modified: trunk/Core/Util/CallbackHelpers.h
==============================================================================
--- trunk/Core/Util/CallbackHelpers.h (original)
+++ trunk/Core/Util/CallbackHelpers.h Fri Dec 14 17:16:54 2007
@@ -189,6 +189,30 @@
Arg2 arg2;
};
+ template<typename Arg1, typename Arg2, typename Arg3, typename Arg4,
typename Arg5>
+ class Callback_Static_0Data_5Arg : public CallbackBase_0Data {
+ public:
+ Callback_Static_0Data_5Arg(void (*pmf)(Arg1, Arg2, Arg3, Arg4, Arg5),
+ Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4, Arg5 arg5)
+ : pmf(pmf), arg1(arg1), arg2(arg2), arg3(arg3), arg4(arg4), arg5(arg5)
+ {
+ }
+ virtual ~Callback_Static_0Data_5Arg()
+ {
+ }
+ virtual void call()
+ {
+ pmf(arg1, arg2, arg3, arg4, arg5);
+ }
+ private:
+ void (*pmf)(Arg1, Arg2, Arg3, Arg4, Arg5);
+ Arg1 arg1;
+ Arg2 arg2;
+ Arg3 arg3;
+ Arg4 arg4;
+ Arg5 arg5;
+ };
+
// 1 Data
template<typename Data1>
class Callback_Static_1Data_0Arg : public CallbackBase_1Data<Data1> {
- [Manta] r1931 - in trunk/Core: Thread Util, kmorley, 12/14/2007
Archive powered by MHonArc 2.6.16.