有时,如果连接std::thread
函具有thread::join()
在析构函数上执行的能力,那将会很有用.请参阅以下示例.
示例1(错误):std::thread
抛出异常后
对象已被销毁.一旦流退出作用域,就会在连接发生之前调用析构函数.它使STL显示'abort'的错误消息.
int main( int argc, const char * argv[] )
{
try
{
thread t( [] ()
{
this_thread::sleep_for( chrono::seconds( 1 ) );
cout << "thread done" << endl;
} );
throw exception( "some exception" );
t.join();
}
catch ( const exception & )
{
cout << "exception caught!" << endl;
}
cout << "main done" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
示例2(正确方法):t
在try-catch块之前创建
对象,并在try和catch块上放置join().所以它保证了join()的发生.
int main( int argc, const char * …
Run Code Online (Sandbox Code Playgroud) 我想使用带有 C++ 代码的 Visual Studio 创建一个绘图图表。图表应基于两个轴。“x”轴显示时间,“y”轴显示阵列数据。数组数据有 100 个元素,一秒内读取一个数据。如何使用任何其他图形库实现代码?
我收到此错误:
"访问冲突执行位置0x00000000."
当我在Windows上使用GLFW + GLEW时.
我正在使用Windows 7.我也有自己的实现(从头开始)创建一个窗口,初始化OpenGL上下文,初始化GLEW等等......一切正常.所以当然我的视频卡具有帧缓冲功能,驱动程序的一切都很好......问题只发生在我尝试使用GLFW时.
有什么建议吗?
代码:
void start()
{
if( !glfwInit() )
{
glfwTerminate();
throw exception( "Failed to initialize GLFW" );
}
glfwOpenWindowHint( GLFW_FSAA_SAMPLES, 4 );
glfwOpenWindowHint( GLFW_OPENGL_VERSION_MAJOR, 3 );
glfwOpenWindowHint( GLFW_OPENGL_VERSION_MINOR, 3 );
glfwOpenWindowHint( GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE );
if( !glfwOpenWindow( m_width, m_height, 0, 0, 0, 0, 32, 0, GLFW_WINDOW ) )
{
throw exception( "Failed to open GLFW window." );
glfwTerminate();
}
if ( glewInit() != GLEW_OK )
{
throw exception( "Failed to initialize GLEW" );
} …
Run Code Online (Sandbox Code Playgroud) 从理论上讲,OpenGL对于"2的幂"纹理具有GL_TEXTURE_2D,对于"2个纹理的非幂"具有GL_TEXTURE_RECTANGLE.
我想知道现代GPU是否仍然关心这种差异,或者这只是过去的问题.换句话说,如果我使用GL_TEXTURE_2D而不是GL_TEXTURE_RECTANGLE来表示"非幂2"纹理,那么现代显卡会不会有性能损失?