2013-06-11 2 views
1

메신저 sfml 및 C++에 새로운. 그리고 sfml 라이브러리를 사용하여 그래픽을 그리는 프로젝트가 있지만 내 프로그램에 추가 스레드를 추가 할 때 스레드 내부에서 코드를 실행하는 데 실패합니다. 이건 내 코드입니다 : (도와주세요!)SFML 멀티 스레딩에서 실패

#include <SFML\Graphics.hpp> 
#include <SFML\window.hpp> 
#include <SFML\system.hpp> 
#include <iostream> 
#include <thread> 
#include <chrono> 
using namespace std; 

int h(sf::RenderWindow* win){ 
    //do something 
    win->close(); 
    this_thread::sleep_for(chrono::milliseconds(10)); 
    return 0; 
} 


int main(){ 
    sf::RenderWindow window(sf::VideoMode(800,600),"My window"); 
    thread t1(h,&window); 
    _sleep(10000000); 
    t1.join(); 
    return 0; 
} 
+0

"... 코드를 실행하지 못했습니다 ..."* 무엇이 발생합니까? –

+1

아무 것도하지 않습니다. – shervin

+0

'sf :: RenderWindow 윈도우 (...);를'h()'로 옮겨보십시오. –

답변

9

http://www.sfml-dev.org/tutorials/2.0/graphics-draw.php#drawing-from-threads

SFML 멀티 스레드 도면을 지원하고, 당신도 그것을 작동하게하는 아무것도 할 필요가 없습니다. 기억해야 할 점은 다른 스레드에서 사용하기 전에 윈도우를 비활성화하는 것입니다. 이는 (더 정확하게는 OpenGL 컨텍스트) 창이 여러 개의 스레드에서 동시에 활성화 될 수 없기 때문입니다.

call window.setActive (false); 메인()에서 스레드에 전달하기 전에.

최대 이식성을 위해 GUI 스레드 (주 스레드)에서 이벤트를 처리해야한다는 것을 기억하십시오.

+0

충분히 upvote 수 없습니다. 나에게 두통의 날을 초래했다. –

관련 문제