SFML 程序出现线程错误

SFML program having thread errors

本文关键字:线程 错误 程序 SFML      更新时间:2023-10-16

我最近开始使用带有Visual studios 2012 c ++的Library SFML。

一切都很好,直到我开始使用自定义字体,然后弹出这些消息,没有任何效果:

'Graphics test.exe' (Win32): Loaded 'C:UsersOliver BoltDocumentsVisual Studio 2012ProjectsGraphics testDebugGraphics test.exe'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64ntdll.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:Program FilesAVAST SoftwareAvastsnxhk.dll'. Cannot find or open the PDB file.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64kernel32.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64KernelBase.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64opengl32.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64msvcrt.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64advapi32.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64sechost.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64rpcrt4.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64sspicli.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64cryptbase.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64gdi32.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64user32.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64lpk.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64usp10.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64glu32.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64ddraw.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64dciman32.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64setupapi.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64cfgmgr32.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64oleaut32.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64ole32.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64devobj.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64dwmapi.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64winmm.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64msvcp110d.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64msvcr110d.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64imm32.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64msctf.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64nvinit.dll'. Cannot find or open the PDB file.
'Graphics test.exe' (Win32): Loaded 'C:Program Files (x86)NVIDIA Corporationcoprocmanager_etoured.dll'. Cannot find or open the PDB file.
'Graphics test.exe' (Win32): Loaded 'C:Program Files (x86)NVIDIA CorporationcoprocmanagerNvd3d9wrap.dll'. Cannot find or open the PDB file.
'Graphics test.exe' (Win32): Loaded 'C:Program Files (x86)NVIDIA Corporationcoprocmanagernvdxgiwrap.dll'. Cannot find or open the PDB file.
'Graphics test.exe' (Win32): Loaded 'C:PROGRA~2OPTIMI~1OPTPRO~1.DLL'. Module was built without symbols.
'Graphics test.exe' (Win32): Unloaded 'C:PROGRA~2OPTIMI~1OPTPRO~1.DLL'
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64uxtheme.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64ig7icd32.dll'. Cannot find or open the PDB file.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64igdusc32.dll'. Cannot find or open the PDB file.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64version.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Unloaded 'C:WindowsSysWOW64version.dll'
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64dinput.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64hid.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64wintrust.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64crypt32.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64msasn1.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Loaded 'C:WindowsSysWOW64ole32.dll'. Symbols loaded.
'Graphics test.exe' (Win32): Unloaded 'C:WindowsSysWOW64ole32.dll'
The thread 0xed8 has exited with code 0 (0x0).
The thread 0x131c has exited with code 0 (0x0).
The thread 0x105c has exited with code 0 (0x0).
The thread 0x19e8 has exited with code 0 (0x0).
The thread 0xeb4 has exited with code 0 (0x0).
The thread 0x187c has exited with code 0 (0x0).
The thread 0x1c78 has exited with code 0 (0x0).
The thread 0x480 has exited with code 0 (0x0).
The thread 0x1244 has exited with code 0 (0x0).
The program '[4124] Graphics test.exe' has exited with code 0 (0x0).

导致这些错误的程序:

#include <SFMLSystem.hpp>
#include <SFMLGraphics.hpp>
#include <ctime>
#include <sstream>
using namespace sf;
using namespace std;
int main()
{
    VideoMode videoMode(320, 240);
    RenderWindow window(videoMode, "Plus or minus");
    Font font;
    if (!font.loadFromFile("TOMB.TTF"))
    {
        return EXIT_FAILURE;
    }
    Text title("Plus Or Minus", font, 20);
    title.setPosition(10, 10);
    title.setColor(Color::White);
    Text question("What is your guess ?",font,20);
    question.setPosition(5,30);
    question.setColor(Color::White);
    Text enter("", font, 20);
    enter.setPosition(5, 50);
    enter.setColor(Color::Green);
    String textEntered;
    int numEntered = 0;
    Text status("", font, 16);
    status.setPosition(100, 50);
    status.setColor(Color::Yellow);
    stringstream out("");
    Text won("You have discoveredn the secret numbern in less than 10 tries,n well played !", font, 20);
    won.setPosition(5, 70);
    won.setColor(Color::Green);
    Text lost("You have failed ton discover the secretn number in less thann 10 tries, better nluck next time!", font, 20);
    lost.setPosition(5, 70);
    lost.setColor(Color::Red);
    srand(static_cast<unsigned int> (time(NULL)));
    int secretNumber = rand() % 100;
    bool isGameOn = true;
    bool playerWon = false;
    int tryNumber = 0;
    while (window.isOpen())
    {
        window.clear();
        window.draw(title);
        if (isGameOn)
        {
            window.draw(question);
            window.draw(enter);
            window.draw(status);
        }
        else
        {
            if (playerWon)
            {
                window.draw(won);
            }
            else
            {
                window.draw(lost);
            }
        }
        window.display();
        Event event;
        while (window.pollEvent(event))
        {
            if ((event.type == Event::Closed) || ((event.type == Event::KeyPressed) && (event.key.code == Keyboard::Escape)))
            {
                window.close();
            }
            if (event.type == Event::TextEntered)
            {
                char c = static_cast<char> (event.text.unicode);
                if (c >= '0' && c <= '9')
                {
                    textEntered += event.text.unicode;
                    enter.setString(textEntered);
                }
                else if (c == 'r')
                {
                    tryNumber++;
                    stringstream in(enter.getString());
                    in >> numEntered;
                    if (numEntered > secretNumber)
                    {
                        out << tryNumber;
                        out << ". ";
                        out << numEntered;
                        out << ": Minus" << endl;
                        status.setString(out.str());
                    }
                    if (numEntered < secretNumber)
                    {
                        out << tryNumber;
                        out << ". ";
                        out << numEntered;
                        out << ": Plus" << endl;
                        status.setString(out.str());
                    }
                    if (numEntered == secretNumber)
                    {
                        playerWon = true;
                        status.setString("");
                        isGameOn = false;
                    }
                    if (tryNumber > 10)
                    {
                        playerWon = false;
                        status.setString("");
                        isGameOn = false;
                    }
                    textEntered = "";
                }
            }
        }
        return EXIT_SUCCESS;
    }
}

我已经四处搜索,但我并没有真正找到这个问题的答案,如果有人能帮我解决这个问题,将不胜感激! :)

此致敬意

自由的Sirenety

while (window.isOpen()) { ... }循环的末尾有一个return语句。因此,循环仅运行一次。