I developed a background Thread using data from a file, so as to get the logic correct before dropping into a thread which monitors port 30003.
It worked fine using the test data thus:
I then re-wrote the code as Thread Script:
I keep getting "Invalid Table Handle" on running the Thread (Second example above but it works ok on the first.
Why does it work in one but not the other??
It worked fine using the test data thus:
Code:
dim MonitorArray[2000] as c dim MonitorModeS[2000] as c dim VarArray[23] as c dim incr as n = 1 fp = file.open("D:\My Databases\SBS\MsgLogs\Testdata.csv",FILE_RW_SHARED) tbl = table.open("Logging",FILE_RW_SHARED) idx = tbl.index_primary_put("Mode_S") WHILE fp.eof() = .f. bsOutput = fp.read_line() bsOutput = substr(bsOutput,at("MSG",bsOutput)) IF left(bsOutput,3) = "MSG" THEN bsOutcrlf = comma_to_crlf(bsOutput) VarArray.clear() dim j as n = 1 FOR each VarRead in bsOutcrlf VarArray[j] = VarRead j = j + 1 next IF inlist(VarArray[2],"3","4","8") THEN [COLOR="Red"][B]rec = tbl.fetch_find(VarArray[5])[/B][/COLOR] checkModeS = MonitorModeS.find(VarArray[5]) IF rec > 0 .and. CheckModeS = 0 THEN MonitorArray[incr] = padr(tbl.reg,10," ")+"["+padr(tbl.Icaotypecode ,4," ")+"]" MonitorModeS[incr] = VarArray[5] incr = incr + 1 END IF IF CheckModeS > 0 .and. VarArray[2] = "3" .and. val(VarArray[15]) <> 0 THEN IF right(ut(MonitorArray[CheckModeS]),1) <> "+" THEN MonitorArray[CheckModeS] = MonitorArray[CheckModeS]+"+" END IF END IF IF rec < 0 .and. CheckModeS = 0 THEN MonitorArray[incr] = padr(VarArray[5],8," ")+"[New]" MonitorModeS[incr] = VarArray[5] incr = incr + 1 END IF END IF END IF END WHILE fp.flush() fp.close() tbl.close()
Code:
thread_create("TestMonitorArrayThread",<<%code% xbasic_error_log("d:\My Databases\SBS\MsgLogs\thread_error_log.txt") dim MonitorThreadRunFlag as l = .t. dim global MonitorArray[2000] as c dim global MonitorModeS[2000] as c dim VarArray[23] as c dim incr as n = 1 dim CheckModeS as n dim bsOutput as c dim bsOutcrlf as c dim j as n dim Tbl as P dim rec as n Tbl = table.open("logging",FILE_RW_SHARED) idx = Tbl.index_primary_put("ModeS") dim bs as p = sockets.open("127.0.0.1",30003,"C") while MonitorThreadRunFlag bsOutput = bs.readline() IF left(bsOutput,3) = "MSG" THEN bsOutcrlf = comma_to_crlf(bsOutput) VarArray.clear() j = 1 for each VarRead in bsOutcrlf VarArray[j] = VarRead j = j + 1 next if inlist(VarArray[2],"3","4","8") then [COLOR="Red"][B]rec = Tbl.fetch_find(VarArray[5])[/B][/COLOR] CheckModeS = MonitorModeS.find(VarArray[5]) if rec > 0 .and. CheckModeS = 0 then MonitorArray[incr] = padr(Tbl.reg,10," ")+"["+padr(Tbl.ICAOTypeCode,4," ")+"]" MonitorModeS[incr] = VarArray[5] incr = incr + 1 end if if CheckModeS > 0 .and. VarArray[2] = "3" .and. val(VarArray[15]) <> 0 then if right(ut(MonitorArray[CheckModeS]),1) <> "+" then MonitorArray[CheckModeS] = MonitorArray[CheckModeS]+"+" end if end if if rec < 0 .and. CheckModeS = 0 then MonitorArray[incr] = padr(VarArray[5],8," ")+"[New]" MonitorModeS[incr] = VarArray[5] incr = incr + 1 end if end if end if end while bs.close() Tbl.close() %code%)
Why does it work in one but not the other??
Comment