SFML community forums

Bindings - other languages => DotNet => Topic started by: Frog on February 04, 2022, 05:51:00 am

Title: Editing Text object while in a task seems to break stuff
Post by: Frog on February 04, 2022, 05:51:00 am
heyo, i was getting really strange behavior from sfml text
after changing DisplayedString while in a task, one of many issues could occur:
it seems like memory is getting corrupted somehow but im not exactly sure why
code:
using System;
using System.Threading;
using System.Threading.Tasks;
using SFML.Graphics;
using SFML.Window;

internal class Program {

        public static RenderWindow Window;

        public static void Main(string[] args) {
                Window = new RenderWindow(new VideoMode(640, 480), "Test");
                Window.SetFramerateLimit(60);

                var textHolder = new TextHolder();

                while (Window.IsOpen) {
                        Window.Clear();
                        Window.Draw(textHolder);
                        Window.Display();
                }
        }
}

internal class TextHolder : Drawable {

        private Text _text;

        public TextHolder() {
                _text = new Text("Initial String", new Font("arial.ttf"));

                Task.Run(() => {
                        Thread.Sleep(1000);
                        _text.DisplayedString = "ABCDEFGHIKLMNOPQRSTUVWXYZ";
                        Console.WriteLine(_text.GetLocalBounds().Width);
                });
        }

        public void Draw(RenderTarget target, RenderStates states) {
                target.Draw(_text);
        }
}
sorry if a missed anything
Title: Re: Editing Text object while in a task seems to break stuff
Post by: eXpl0it3r on February 04, 2022, 09:39:20 am
SFML isn't thread-safe, so you can't just spin up a separate thread/task without synchronizing the shared resource (i.e. _text).

Also, you'll need to hold on to your Font object, otherwise it might be prematurely disposed.
Title: Re: Editing Text object while in a task seems to break stuff
Post by: Frog on February 04, 2022, 09:45:12 am
aaah yeah that makes sense, ill look in to doing that
thanks for the quick reply!