[gelöst] [C++ / DirectX9] boost:thread
Verfasst: 17.10.2010, 14:39
Hallo zusammen,
ich versuche momentan in meinem DirectX9 Programm den Befehl D3DXCreateTextureFromFileEx parallel zum Renderloop auszuführen.
Hierfür benutze ich den boost:thread.
Leider stürzt das Programm immer dann ab, wenn die Funktion, welche die Textur erstellen soll, über den Thread ausgeführt wird.
An der Funktion selbst kann es aber nicht liegen, da ich bereits versucht habe, diese Funktion in der Renderloop mittels der Taste F2 ausführen zu lassen.
Bestücke ich die Funktion mit anderen Befehlen, so klappt das ganze ohne Absturz. Der Fehler hat wohl die Ursache in D3DXCreateTextureFromFileEx.
Aber warum?
Hier sind ein paar Zeilen Code:
Funktion zum erstellen der Textur
Hauptprogramm
Die Zeile
Hat jemand eine Erklärung für diesen Absturz?
Die Textur wird übrigens 'noch' nicht im Programm verwendet...
ich versuche momentan in meinem DirectX9 Programm den Befehl D3DXCreateTextureFromFileEx parallel zum Renderloop auszuführen.
Hierfür benutze ich den boost:thread.
Leider stürzt das Programm immer dann ab, wenn die Funktion, welche die Textur erstellen soll, über den Thread ausgeführt wird.
An der Funktion selbst kann es aber nicht liegen, da ich bereits versucht habe, diese Funktion in der Renderloop mittels der Taste F2 ausführen zu lassen.
Bestücke ich die Funktion mit anderen Befehlen, so klappt das ganze ohne Absturz. Der Fehler hat wohl die Ursache in D3DXCreateTextureFromFileEx.
Aber warum?
Hier sind ein paar Zeilen Code:
Funktion zum erstellen der Textur
Code: Alles auswählen
void loadTextureArray()
{
D3DXIMAGE_INFO ImgInfo;
D3DXGetImageInfoFromFile("fantasy_cave.bmp", &ImgInfo);
m_pTexture2 = NULL;
// Textur anlegen
hr = D3DXCreateTextureFromFileEx(geti(Device).d3d_9_device,
"fantasy_cave.bmp",
256,
256,
0,0,
D3DFMT_UNKNOWN,
D3DPOOL_MANAGED,
D3DX_FILTER_NONE,
D3DX_FILTER_NONE,
RGB(255,0,255),0,0,
&m_pTexture2);
if( FAILED(hr) )
{
}
else
{
}
};
Code: Alles auswählen
void startThread1();
// Boost Includes
#include <boost/thread.hpp>
.
.
.
// Version 1: Hiermit funktioniert der Aufruf nicht
boost::thread thread_(&startThread1);
while(Window.Update())
{
RENDER_SCENE;
.
.
// Version 2: Hiermit funktioniert der Aufruf
if ( InputManager.Keyswitcher(DIK_F2, KEY_IMPULS_SINGLE) == true )
{
loadTextureArray();
}
.
PRESENT_SCENE;
}
void startThread1()
{
// Thread 1: Start
loadTextureArray();
// Thread 1: Ende
};
Die Zeile
wird natürlich auskommentiert, wenn Version 2 funktionerien soll.boost::thread thread_(&startThread1);
Hat jemand eine Erklärung für diesen Absturz?
Die Textur wird übrigens 'noch' nicht im Programm verwendet...