diff -r 1fb6cf5a4c4d -r ab487d32ce9a targets/Win32/plc_Win32_main.c --- 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);