targets/Win32/plc_Win32_main.c
changeset 954 ab487d32ce9a
parent 709 fe65601bd983
child 985 cd8dadcef426
--- a/targets/Win32/plc_Win32_main.c	Mon Mar 04 12:22:49 2013 +0900
+++ b/targets/Win32/plc_Win32_main.c	Mon Mar 04 17:49:12 2013 +0900
@@ -15,6 +15,18 @@
 {
     return InterlockedCompareExchange(atomicvar, exchange, compared);
 }
+CRITICAL_SECTION Atomic64CS; 
+long long AtomicCompareExchange64(long long* atomicvar, long long compared, long long exchange)
+{
+    long long res;
+    EnterCriticalSection(&Atomic64CS);
+    res=*atomicvar;
+    if(*atomicvar == compared){
+        *atomicvar = exchange;
+    }
+    LeaveCriticalSection(&Atomic64CS);
+    return res;
+}
 
 struct _timeb timetmp;
 void PLC_GetTime(IEC_TIME *CURRENT_TIME)
@@ -63,10 +75,13 @@
 int startPLC(int argc,char **argv)
 {
 	unsigned long thread_id = 0;
+    BOOL tmp;
     setlocale(LC_NUMERIC, "C");
 	/* Define Ttick to 1ms if common_ticktime not defined */
     Ttick = common_ticktime__?common_ticktime__:1000000;
 
+    InitializeCriticalSection(&Atomic64CS);
+
     debug_sem = CreateSemaphore(
                             NULL,           // default security attributes
                             1,  			// initial count
@@ -159,6 +174,7 @@
     CloseHandle(PLC_timer);
     WaitForSingleObject(PLC_thread, INFINITE);
     __cleanup();
+    DeleteCriticalSection(&Atomic64CS);
     CloseHandle(debug_wait_sem);
     CloseHandle(debug_sem);
     CloseHandle(python_wait_sem);