--- 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);