Compare commits
2 Commits
wagic-v0.2
...
SDL_build
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
25c844c1f5 | ||
|
|
34492d9096 |
@@ -1,7 +1,7 @@
|
|||||||
#ifndef THREADING_H
|
#ifndef THREADING_H
|
||||||
#define THREADING_H
|
#define THREADING_H
|
||||||
|
|
||||||
#if !defined(PSP) && !defined(QT_CONFIG) && !(__cplusplus > 199711L)
|
#if !defined(PSP) && !defined(QT_CONFIG) && !(__cplusplus > 199711L) && !defined(SDL_CONFIG)
|
||||||
#include <boost/date_time.hpp>
|
#include <boost/date_time.hpp>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
@@ -611,6 +611,226 @@ namespace boost
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#elif defined(SDL_CONFIG)
|
||||||
|
#include "SDL_thread.h"
|
||||||
|
#include "SDL_timer.h"
|
||||||
|
|
||||||
|
#include <boost/bind.hpp>
|
||||||
|
#include <boost/shared_ptr.hpp>
|
||||||
|
|
||||||
|
#include "../include/JLogger.h"
|
||||||
|
|
||||||
|
namespace boost
|
||||||
|
{
|
||||||
|
template <class Mutex>
|
||||||
|
struct unique_lock
|
||||||
|
{
|
||||||
|
unique_lock(Mutex& inMutex) : mMutex(&inMutex)
|
||||||
|
{
|
||||||
|
mMutex->lock();
|
||||||
|
}
|
||||||
|
|
||||||
|
~unique_lock()
|
||||||
|
{
|
||||||
|
mMutex->unlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
Mutex* mMutex;
|
||||||
|
};
|
||||||
|
|
||||||
|
class mutex
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
typedef unique_lock<mutex> scoped_lock;
|
||||||
|
|
||||||
|
mutex()
|
||||||
|
: mpSDLMutex(0)
|
||||||
|
{
|
||||||
|
mpSDLMutex = SDL_CreateMutex();
|
||||||
|
}
|
||||||
|
|
||||||
|
~mutex()
|
||||||
|
{
|
||||||
|
SDL_DestroyMutex(mpSDLMutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
void lock()
|
||||||
|
{
|
||||||
|
SDL_mutexP(mpSDLMutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
void unlock()
|
||||||
|
{
|
||||||
|
SDL_mutexV(mpSDLMutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_mutex* mpSDLMutex;
|
||||||
|
|
||||||
|
private:
|
||||||
|
mutex(mutex const&);
|
||||||
|
mutex& operator=(mutex const&);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class recursive_mutex
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
typedef unique_lock<recursive_mutex> scoped_lock;
|
||||||
|
|
||||||
|
recursive_mutex()
|
||||||
|
: mpSDLMutex(0)
|
||||||
|
{
|
||||||
|
mpSDLMutex = SDL_CreateMutex();
|
||||||
|
}
|
||||||
|
|
||||||
|
~recursive_mutex()
|
||||||
|
{
|
||||||
|
SDL_DestroyMutex(mpSDLMutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
void lock()
|
||||||
|
{
|
||||||
|
SDL_mutexP(mpSDLMutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
void unlock()
|
||||||
|
{
|
||||||
|
SDL_mutexV(mpSDLMutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_mutex* mpSDLMutex;
|
||||||
|
|
||||||
|
private:
|
||||||
|
recursive_mutex(recursive_mutex const&);
|
||||||
|
recursive_mutex& operator=(recursive_mutex const&);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
** Emulating boost::thread configuration glue, with some shortcuts
|
||||||
|
** This detail namespace is a distillation of boost's thread.hpp, thread_data.hpp.
|
||||||
|
*/
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
struct thread_data_base
|
||||||
|
{
|
||||||
|
thread_data_base()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~thread_data_base()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void run() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef boost::shared_ptr<detail::thread_data_base> thread_data_ptr;
|
||||||
|
|
||||||
|
template<typename F>
|
||||||
|
class thread_data : public detail::thread_data_base
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
thread_data(F f_) : f(f_)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void run()
|
||||||
|
{
|
||||||
|
f();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
F f;
|
||||||
|
|
||||||
|
void operator=(thread_data&);
|
||||||
|
thread_data(thread_data&);
|
||||||
|
};
|
||||||
|
|
||||||
|
} //namespace detail
|
||||||
|
|
||||||
|
/**
|
||||||
|
** A simplistic implementation of boost::thread, using QThread.
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
class thread
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
** Helper class for sceKernelStartThread, which passes args by value, not by reference
|
||||||
|
** We use this struct to wrap any pointers that we want to pass to the worker thread.
|
||||||
|
*/
|
||||||
|
struct CallbackData
|
||||||
|
{
|
||||||
|
CallbackData(detail::thread_data_ptr inThreadInfo)
|
||||||
|
: mThreadInfo(inThreadInfo)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
detail::thread_data_ptr mThreadInfo;
|
||||||
|
};
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
thread()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class F,class A1>
|
||||||
|
thread(F f, A1 a1) : mThreadInfo(make_thread_info(boost::bind(boost::type<void>(), f, a1)))
|
||||||
|
{
|
||||||
|
mpSDLThread = SDL_CreateThread(ThreadProc, &mThreadInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
~thread()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void join()
|
||||||
|
{
|
||||||
|
int status;
|
||||||
|
SDL_WaitThread(mpSDLThread, &status);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
static int ThreadProc(void *inParam)
|
||||||
|
{
|
||||||
|
detail::thread_data_ptr* threadInfo = reinterpret_cast<detail::thread_data_ptr* >(inParam);
|
||||||
|
CallbackData callbackData(*threadInfo);
|
||||||
|
|
||||||
|
LOG("Entering thread::ThreadProc");
|
||||||
|
callbackData.mThreadInfo->run();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename F>
|
||||||
|
static inline detail::thread_data_ptr make_thread_info(F f)
|
||||||
|
{
|
||||||
|
return detail::thread_data_ptr(new detail::thread_data<F>(f));
|
||||||
|
}
|
||||||
|
|
||||||
|
detail::thread_data_ptr mThreadInfo;
|
||||||
|
SDL_Thread* mpSDLThread;
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace posix_time
|
||||||
|
{
|
||||||
|
typedef unsigned int milliseconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
** boost's platform neutral sleep call.
|
||||||
|
*/
|
||||||
|
namespace this_thread
|
||||||
|
{
|
||||||
|
inline void sleep(boost::posix_time::milliseconds const& time)
|
||||||
|
{
|
||||||
|
SDL_Delay(time);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // THREADING_H
|
#endif // THREADING_H
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ ant debug -f projects/mtg/Android/build.xml
|
|||||||
# we're building a Qt version with GUI here
|
# we're building a Qt version with GUI here
|
||||||
mkdir qt-gui-build
|
mkdir qt-gui-build
|
||||||
cd qt-gui-build
|
cd qt-gui-build
|
||||||
qmake ../projects/mtg/wagic-qt.pro CONFIG+=release CONFIG+=graphics
|
qmake ../projects/mtg/wagic-SDL.pro CONFIG+=release CONFIG+=graphics
|
||||||
make -j 8
|
make -j 8
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user