我有一个应用程序,下降到10fps左右.我使用xperf对其进行了分析,结果显示我的应用程序只使用了20%的CPU,而我的方法都没有使用超过20%的预期数量.
这似乎表明fps的大幅下降是因为显卡无法跟上渲染帧,导致我的程序在赶上时停止...
有没有办法分析显卡是什么,并找出我的程序告诉它做什么减慢速度,以便我可以尝试提高帧速率?
在使用XAudio2和Direct3D9/10的应用程序中显示视频(有声!)的最佳/最简单方法是什么?
至少它需要能够流式传输更大的视频,并注意窗口宽高比可能与视频不同的事实(例如通过添加信箱),尽管理想情况下我喜欢将视频嵌入到视频中的能力一个3D场景.
我当然可以设法将每个帧加载到纹理中,一旦渲染就丢弃/重复使用纹理,并通过XAudio2单独播放音频,但是除了编写至少一种格式的加载器之外,还必须处理喜欢同步视频和音频组件之类的东西,所以希望有一个更好的解决方案,甚至是现成的免费解决方案(二进制形式的商业发行,动态链接在LGPL的情况下很好).
我需要检查具有给定HANDLE的进程是否仍在运行,我尝试使用以下代码执行此操作,但它始终返回第二个返回false,即使进程正在运行.
bool isProcessRunning(HANDLE process)
{
if(process == INVALID_HANDLE_VALUE)return false;
DWORD exitCode;
if(GetExitCodeProcess(process, &exitCode) != 0)
return false;//always returns here
return GetLastError() == STILL_ACTIVE;//still running
}
Run Code Online (Sandbox Code Playgroud) 目前我的应用程序仅使用Direct3D9进行图形处理,但是将来我计划将其扩展到D3D10和可能的OpenGL.问题是如何以一种整洁的方式做到这一点?
目前我的代码中有各种Render方法
void Render(boost::function<void()> &Call)
{
D3dDevice->BeginScene();
Call();
D3dDevice->EndScene();
D3dDevice->Present(0,0,0,0);
}
Run Code Online (Sandbox Code Playgroud)
传递的函数取决于确切的状态,例如MainMenu-> Render,Loading-> Render等.然后这些函数会调用其他对象的方法.
void RenderGame()
{
for(entity::iterator it = entity::instances.begin();it != entity::instance.end(); ++it)
(*it)->Render();
UI->Render();
}
Run Code Online (Sandbox Code Playgroud)
以及从entity :: Base派生的示例类
class Sprite: public Base
{
IDirect3DTexture9 *Tex;
Point2 Pos;
Size2 Size;
public:
Sprite(IDirect3DTexture9 *Tex, const Point2 &Pos, const Size2 &Size);
virtual void Render();
};
Run Code Online (Sandbox Code Playgroud)
然后,每种方法在给定更详细的设置(例如,是否支持像素着色器)的情况下处理最佳渲染方式.
问题是我真的不知道如何扩展它以便能够使用其中一个,可能有所不同(D3D v OpenGL)渲染模式......
我需要编写一些方法来加载/保存一些类到二进制文件和从二进制文件.但是我也希望能够接受来自其他地方的二进制数据,例如二进制字符串.
在c ++中我可以通过简单地使我的类方法使用std :: istream和std :: ostream来实现这一点,它可以是文件,字符串流,控制台等等.
python是否有类似的输入/输出类,可以表示几乎任何形式的i/o,或至少文件和内存?
我有一个由两个进程组成的项目,我需要以快速有效的方式在它们之间传递一些数据.
我知道我可以使用套接字来使用TCP来执行此操作,即使这两个进程始终存在于同一台计算机上,但这似乎不是一个非常有效的解决方案.
我看到很多关于在Linux上使用"管道"的信息.但是我主要想要Windows和Linux(最好通过跨平台库),理想情况是安全,无阻塞.
另一个重要的事情是我需要支持整个应用程序的多个实例(即两个进程),每个实例都有自己独立的通信对象副本.
还有一种跨平台的方式来产生一个新的过程吗?
有没有更好的方法来初始化C++代码中的C结构?
我可以在变量声明点使用初始化列表; 但是,如果在编译时不知道所有参数,或者如果我没有声明本地/全局实例,那么这没有用,例如:
遗留C代码,它声明了结构,并且还使用了API
typedef struct
{
int x, y, z;
} MyStruct;
Run Code Online (Sandbox Code Playgroud)
使用C库的C++代码
void doSomething(std::vector<MyStruct> &items)
{
items.push_back(MyStruct(5,rand()%100,items.size()));//doesn't work because there is no such constructor
items.push_back({5,rand()%100,items.size()});//not allowed either
//works, but much more to write...
MyStruct v;
v.x = 5;
v.y = rand()%100;
v.z = items.size();
items.push_back(v);
}
Run Code Online (Sandbox Code Playgroud)
创建本地实例然后一次设置一个成员(myStruct.x = 5;等)是一个真正的痛苦,当尝试将20个不同的项添加到容器时有点难以阅读...
我有一个类(A)在其构造函数和析构函数中访问(间接通过静态方法)另一个类(B)中的静态变量(STL容器).
对象可以是全局的,全局常量,另一个类的静态成员,存储在其他类(可能本身具有全局或静态实例)中,或者基本上可以是c ++对象的任何其他位置.
如果A对象在B中的静态成员之前构造或在B中的静态成员之后被破坏,则会在某些时候导致崩溃(通常是访问冲突).
有没有一些方法,以保证(除了那些已经泄漏,因为按照定义,"迷失"等不会被破坏任何方式)A类的所有实例构造之后和在B的静态变量破坏?
我已经看到了一些解决方案,用于使特定变量在另一个之前/之后被构造/销毁,但是不是给定类型的所有实例的一般情况,因此我不确定如何处理它.
我正在尝试使用一个简单的websocket来集成到我的应用程序中.但是我无法使用Spring API,在调用我的处理程序尝试将Tomcat类型转换为javax对象之前的某个地方使用ClassCastException.如果我只是在没有Spring的情况下直接使用Tomcat(那么javax.websocket对象和注释)它可以很好地工作,所以我真的不确定为什么Spring存在问题.
08-May-2014 01:10:12.048 SEVERE [http-nio-8084-exec-88] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [dispatcher] in context with path [/WebsocketSpringTest] threw exception [Request processing failed; nested exception is org.springframework.web.socket.server.HandshakeFailureException: Uncaught failure for request http://localhost:8084/WebsocketSpringTest/socket; nested exception is java.lang.ClassCastException: org.apache.tomcat.websocket.server.WsServerContainer cannot be cast to javax.websocket.server.ServerContainer] with root cause
java.lang.ClassCastException: org.apache.tomcat.websocket.server.WsServerContainer cannot be cast to javax.websocket.server.ServerContainer
at org.springframework.web.socket.server.standard.AbstractStandardUpgradeStrategy.getContainer(AbstractStandardUpgradeStrategy.java:67)
Run Code Online (Sandbox Code Playgroud)
TestSocket.java
import org.springframework.web.socket.WebSocketHandler;
public class TestSocket implements WebSocketHandler {
...
Run Code Online (Sandbox Code Playgroud)
web.xml中
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
调度员servlet.xml中
<context:component-scan base-package="com.willnewbery.websocketspringtest" />
<context:annotation-config />
<mvc:annotation-driven /> …Run Code Online (Sandbox Code Playgroud) Ruby中关于各种类似函数的结构的参数数量以及如何调用它们的规则是什么?
例如,我注意到当具有多个参数的块时,传递一个数组参数,它会被扩展,这似乎不适用于方法.我经常在Hash对象上看到Enumerable模块方法.
{a: 5}.map{|x| x} # [[:a, 5]]
{a: 5}.map{|k, v| [k, v]} # [[:a, 5]]
[[:a, 5]].map{|x| x} # [[:a, 5]]
[[:a, 5]].map{|k, v| [k, v]} # [[:a, 5]]
proc1 = Proc.new{|x| x}
proc1.call 5 # 5
proc1.call 5, 6 # 5
proc1.call [5, 6] # [5, 6]
proc2 = Proc.new{|k, v| [k, v]}
proc2.call 5 # [5, nil]
proc2.call 5, 6 # [5, 6]
proc2.call [5, 6] # [5, 6], not [[5, 6], nil]
def f(k, v); [k, …Run Code Online (Sandbox Code Playgroud)