I was trying an experiment to see if I could use a background thread to draw some UI things, and although it seems to work, I am seeing these strange purple warnings in Xcode like this:
-[NSView frame] must be used from main thread only
-[NSView window] must be used from main thread only
This is apparently a result of using calls like getBounds() in the code that is being drawn by the thread.
I did copy the basic approach from the multithreading demo, i.e. using a MessageManagerLock:
void run() override
{
// this is the code that runs this thread - we'll loop continuously,
// updating the coordinates of our blob.
// threadShouldExit() returns true when the stopThread() method has been
// called, so we should check it often, and exit as soon as it gets flagged.
while (! threadShouldExit())
{
// sleep a bit so the threads don't all grind the CPU to a halt..
wait (interval);
// because this is a background thread, we mustn't do any UI work without
// first grabbing a MessageManagerLock..
const MessageManagerLock mml (Thread::getCurrentThread());
if (! mml.lockWasGained()) // if something is trying to kill this job, the lock
return; // will fail, in which case we'd better return..
// now we've got the UI thread locked, we can mess about with the components
moveBall();
}
Is this not something that can or should be done?