Author: Tony Werten
Date: 23:55:53 09/09/03
Go up one level in this thread
On September 09, 2003 at 14:23:46, Andreas Herrmann wrote: >On September 09, 2003 at 04:10:53, Tony Werten wrote: > >>On September 09, 2003 at 03:21:34, Andreas Herrmann wrote: >> >>>On September 09, 2003 at 02:14:08, Tony Werten wrote: >>> >>>Hi Tony, >>> >>>i have just read inside a Delphi internals book last week a 50 side long capitel >>>about Thread programming. It says that all local vars are save, but pay >>>attention for global vars. See the help to the win api function >>>EnterCriticalSection or the VCL object TCriticalSection as a good starting point >>>to this theme. >>> >>>Andreas >> >>Thanks ( to all) >> >>It seems that "write" is not threadsafe when used for writing to the console. I >>added some checks to make sure only 1 thread is writing at a time. Hope this >>solves the problems. >> >>The problems became worse when I changed from writeln to write which seems >>logic: more time spend in writing so bigger change for collisions. >> >> >>Tony > >yes that can be a problem. I don't have this problem, because only my main >thread (= the chess engine) writes to the standard output and my second thread >polls the standard input and writes it to a own global buffer. > >Your problem could also be solved with Mutex (like Robert describes). See >CreateMutex or OpenMutex for further help. I took the cheapo way. I made a global wb_busy boolean (set to false) In the writefunction I first do "while wb_busy do sleep(20)" then wb_busy:=true and end the function with wb_busy:=false It seems to work. Everybody thanks, specially the person who wrote me a week ago that consoles aren't threadsafe. Now I understand what he meant :( Tony > >Andreas > > > > >> >>> >>> >>> >>>>Hi, >>>> >>>>maybe a silly question, but one get quite desperate during debugging. Suppose I >>>>have the followin code: >>>> >>>>procedure whatever(param:integer) >>>>begin >>>> do_something_heavy_with_param; >>>>end; >>>> >>>>Say, the heavy stuff takes about 10 seconds. >>>> >>>>If during these secs another thread is calling this function, what happens ? >>>> >>>>Does every thread gets a "local copy" of the function ? >>>> >>>>On a single processor, there is a context switch, stuff is pushed on a stack, >>>>and everything is safe. >>>> >>>>What about a dual ? I get the feeling that param is actually changed by the >>>>second call. >>>> >>>>Tony
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.