To avoid having multiple Processes concurrently writing (#show:) to the Transcript, I have an class (#StringPump) with an instance of SharedQueue on which the Processes place Strings (using #nextPut:). A separate Process (part of #StringPump) retrieves the Strings (using #next) and writes the String to the Transcript:
run | nextValue | [true] whileTrue: [nextValue _ self sharedQ next. Transcript cr; show: nextValue]
This resulted in an error with the following call stack:
MessageNotUnderstood: stringIndex UndefinedObject(Object)>>doesNotUnderstand: TextMorphEditor(ParagraphEditor)>>selectionInterval PluggableTextMorph>>scrollSelectionIntoView: PluggableTextMorph>>scrollSelectionIntoView PluggableTextMorph>>handleEdit: PluggableTextMorph>>update: [] in TranscriptStream(Object)>>changed: Array(SequenceableCollection)>>do: TranscriptStream(Object)>>changed: TranscriptStream>>endEntry TranscriptStream>>show: StringPump>>run [] in StringPump class>>new: [] in BlockContext>>newProcess
Any suggestions on how I can have multiple threads write to the Transcript (concurrently) - without problems? I have also seen another error concerning indices and #endEntry.
---John
squeak-dev@lists.squeakfoundation.org