summaryrefslogtreecommitdiffstats
path: root/src/uscxml/concurrency/tinythread.cpp
diff options
context:
space:
mode:
authorStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2014-06-25 21:05:44 (GMT)
committerStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2014-06-25 21:05:44 (GMT)
commite3767be4f9c5874d9c996200f2e9705ce31a5976 (patch)
treebe3d06f550286e23eeb3252277c1a2b7d12554ef /src/uscxml/concurrency/tinythread.cpp
parent758bda908ded461c9d34d274a18454ffba4b7450 (diff)
downloaduscxml-e3767be4f9c5874d9c996200f2e9705ce31a5976.zip
uscxml-e3767be4f9c5874d9c996200f2e9705ce31a5976.tar.gz
uscxml-e3767be4f9c5874d9c996200f2e9705ce31a5976.tar.bz2
Work on bindings
- Introduced exceptions into C# and Java - Moved binding examples to /embedding - Interpreter will now throw exceptions, beware!
Diffstat (limited to 'src/uscxml/concurrency/tinythread.cpp')
-rw-r--r--src/uscxml/concurrency/tinythread.cpp21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/uscxml/concurrency/tinythread.cpp b/src/uscxml/concurrency/tinythread.cpp
index 6167545..d46cda3 100644
--- a/src/uscxml/concurrency/tinythread.cpp
+++ b/src/uscxml/concurrency/tinythread.cpp
@@ -85,10 +85,27 @@ condition_variable::~condition_variable() {
#endif
#if defined(_TTHREAD_WIN32_)
-void condition_variable::_wait() {
+void condition_variable::_wait(unsigned int ms) {
+ if (ms <= 0)
+ ms = INFINITE;
// Wait for either event to become signaled due to notify_one() or
// notify_all() being called
- int result = WaitForMultipleObjects(2, mEvents, FALSE, INFINITE);
+ int result = WaitForMultipleObjects(2, mEvents, FALSE, ms);
+ if (result == WAIT_FAILED) {
+ LPVOID lpMsgBuf;
+ FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_SYSTEM |
+ FORMAT_MESSAGE_IGNORE_INSERTS,
+ NULL,
+ GetLastError(),
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
+ (LPTSTR) &lpMsgBuf,
+ 0,
+ NULL);
+// UM_LOG_ERR("%s", lpMsgBuf);
+ LocalFree(lpMsgBuf);
+
+ }
// Check if we are the last waiter
EnterCriticalSection(&mWaitersCountLock);