summaryrefslogtreecommitdiff
path: root/Platform/Unix/Thread.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Platform/Unix/Thread.cpp')
-rw-r--r--Platform/Unix/Thread.cpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/Platform/Unix/Thread.cpp b/Platform/Unix/Thread.cpp
new file mode 100644
index 0000000..7afe683
--- /dev/null
+++ b/Platform/Unix/Thread.cpp
@@ -0,0 +1,54 @@
+/*
+ Copyright (c) 2008 TrueCrypt Developers Association. All rights reserved.
+
+ Governed by the TrueCrypt License 3.0 the full text of which is contained in
+ the file License.txt included in TrueCrypt binary and source code distribution
+ packages.
+*/
+
+#include <pthread.h>
+#include <unistd.h>
+#include "Platform/SystemException.h"
+#include "Platform/Thread.h"
+#include "Platform/SystemLog.h"
+
+namespace TrueCrypt
+{
+ void Thread::Join () const
+ {
+ int status = pthread_join (SystemHandle, nullptr);
+ if (status != 0)
+ throw SystemException (SRC_POS, status);
+ }
+
+ void Thread::Start (ThreadProcPtr threadProc, void *parameter)
+ {
+ pthread_attr_t attr;
+ size_t stackSize = 0;
+ int status;
+
+ status = pthread_attr_init (&attr);
+ if (status != 0)
+ throw SystemException (SRC_POS, status);
+
+ status = pthread_attr_getstacksize (&attr, &stackSize);
+ if (status != 0)
+ throw SystemException (SRC_POS, status);
+
+ if (stackSize < MinThreadStackSize)
+ {
+ status = pthread_attr_setstacksize (&attr, MinThreadStackSize);
+ if (status != 0)
+ throw SystemException (SRC_POS, status);
+ }
+
+ status = pthread_create (&SystemHandle, nullptr, threadProc, parameter);
+ if (status != 0)
+ throw SystemException (SRC_POS, status);
+ }
+
+ void Thread::Sleep (uint32 milliSeconds)
+ {
+ ::usleep (milliSeconds * 1000);
+ }
+}