summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/Src/UDPWiimote.cpp
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2011-01-27 20:47:58 +0000
committerJordan Woyak <jordan.woyak@gmail.com>2011-01-27 20:47:58 +0000
commit2c05c49a04aa838047417825c289958efb59ee3c (patch)
tree2731699f2223276c60b6b403d3a080d75f99bf74 /Source/Core/InputCommon/Src/UDPWiimote.cpp
parent0371f15c23bf9fb64941e3adbc72b80f955e2ff5 (diff)
Replaced Common::Thread with a partial implementation of std::thread. (rvalue references are used if available, <thread> is used if possible) Eliminates the need to use dynamic memory allocation for threads, so it's impossible to forget to delete a thread or set a pointer to NULL. Enables use of type-safe thread functions, no need to cast to and from void*. I've made sure the code compiles in vs08 and tested the functionality of "StdThread.h" on Linux so I'm hoping everything will work :p. In the future "StdThread.h" can be removed (maybe when OS X ships with gcc 4.4 and vs2015 is released :p).
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@6933 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Core/InputCommon/Src/UDPWiimote.cpp')
-rw-r--r--Source/Core/InputCommon/Src/UDPWiimote.cpp19
1 files changed, 6 insertions, 13 deletions
diff --git a/Source/Core/InputCommon/Src/UDPWiimote.cpp b/Source/Core/InputCommon/Src/UDPWiimote.cpp
index 6fde1732d9..558e4d902d 100644
--- a/Source/Core/InputCommon/Src/UDPWiimote.cpp
+++ b/Source/Core/InputCommon/Src/UDPWiimote.cpp
@@ -47,7 +47,7 @@
struct UDPWiimote::_d
{
- Common::Thread * thread;
+ std::thread thread;
std::list<sock_t> sockfds;
Common::CriticalSection termLock,mutex,nameMutex;
volatile bool exit;
@@ -56,15 +56,9 @@ struct UDPWiimote::_d
int UDPWiimote::noinst=0;
-void _UDPWiiThread(void* arg)
+void UDPWiiThread(UDPWiimote* arg)
{
- ((UDPWiimote*)arg)->mainThread();
-}
-
-THREAD_RETURN UDPWiiThread(void* arg)
-{
- _UDPWiiThread(arg);
- return 0;
+ arg->mainThread();
}
UDPWiimote::UDPWiimote(const char *_port, const char * name, int _index) :
@@ -86,7 +80,6 @@ UDPWiimote::UDPWiimote(const char *_port, const char * name, int _index) :
#endif
struct addrinfo hints, *servinfo, *p;
int rv;
- d->thread=NULL;
#ifdef _WIN32
if (noinst==0)
@@ -142,7 +135,7 @@ UDPWiimote::UDPWiimote(const char *_port, const char * name, int _index) :
initBroadcastIPv4();
initBroadcastIPv6();
d->termLock.Enter();
- d->thread = new Common::Thread(UDPWiiThread,this);
+ d->thread = std::thread(UDPWiiThread, this);
d->termLock.Leave();
return;
}
@@ -226,8 +219,8 @@ void UDPWiimote::mainThread()
UDPWiimote::~UDPWiimote()
{
- d->exit=true;
- d->thread->WaitForDeath();
+ d->exit = true;
+ d->thread.join();
d->termLock.Enter();
d->termLock.Leave();
for (std::list<sock_t>::iterator i=d->sockfds.begin(); i!=d->sockfds.end(); i++)