diff -r 6e205c1f05a0 -r eee7625de1f7 targets/Win32/plc_Win32_main.c --- a/targets/Win32/plc_Win32_main.c Wed Aug 29 21:14:23 2012 +0200 +++ b/targets/Win32/plc_Win32_main.c Thu Mar 07 11:47:43 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);