我想在一台机器上运行一批20个CPU密集型comps(基本上很长时间嵌套for循环).
这20个工作中的每一个都不与其他工作共享数据19.
如果机器有N个核心,那么我应该将这些工作中的N-1分开吗?还是N?或者我应该只启动所有20,并让Windows弄清楚如何安排它们?
我需要几个STL容器,线程安全.
基本上我以为我只需要为每个STL容器对象添加2个方法,
.lock()
.unlock()
Run Code Online (Sandbox Code Playgroud)
我也可以打破它
.lockForReading()
.unlockForReading()
.lockForWriting()
.unlockForWriting()
Run Code Online (Sandbox Code Playgroud)
可行的方法是可以接受任意数量的并行读取锁,但如果有写入锁,则会阻止读取和写入.
尝试锁定写入等待直到lockForReading信号量降为0.
有没有标准的方法来做到这一点?
我是如何计划做错的或短视的?
我想做这样的事情:
template <typename T:public Vertex> addTri( T v1, T v2, T v3 )
{
// Take v1.pos, v2.pos, v3.pos and create a geometric repn..
Triangle tri( v1.pos, v2.pos, v3.pos ) ; // all vertices will
// have to have a .pos member.
// Create the vertex buffer..
VertexBuffer<T> vb ...
}
Run Code Online (Sandbox Code Playgroud)
由于这不起作用,这是我的解决方法..
template <typename T> addTri( T v1, T v2, T v3 )
{
Vertex* p1 = (Vertex*)&v1 ;
// This is a very "shut up C++, I know what …Run Code Online (Sandbox Code Playgroud) 在启动我的(以前的靴子)工作VS 2010项目时,我突然遇到了这个问题.
应用程序无法正确启动(0xc0000013).单击"确定"关闭应用程序.
调试输出:
`The program '[5940] myapp.exe: Native' has exited with code -1073741805 (0xc0000013).`
Run Code Online (Sandbox Code Playgroud) 我正在寻找一个特定于MSVC++的任意精度库.由于我不需要跨平台兼容性来处理我正在工作的东西,所以我宁愿不要把它弄得一团糟.
我试着看NTL,但在看到" 这些步骤与MSVC++ v6一起工作 " 这样的陈述时,我忍不住将它作为过时的精神埋葬.最新版本: 2009 08 14.
MPIR看起来很有前途(最新版本2011 06 14),这是我迄今为止发现的最好的东西.
有关从MSVC++(本机代码,而不是.NET)执行至少 128位浮点运算的任何建议吗?
我接手了一个解决方案中的 C++ 代码。那个解决方案包含许多项目。我编辑了一个 .cpp 文件,但无法归档它属于哪个项目,所以我不知道要构建哪个项目。构建整个解决方案需要很长时间。如何找出 .cpp 文件属于哪个项目?
我正在尝试使用英特尔内在函数来击败编译器优化代码.有时候我可以做到,有时我做不到.
我想问题是,为什么我有时会击败编译器,但有时候不是?我operator+=使用英特尔内在函数获得了0.006秒的时间(使用裸C++时为0.009),但operator+使用内在函数的时间为0.07秒,而裸C++仅为0.03秒.
#include <windows.h>
#include <stdio.h>
#include <intrin.h>
class Timer
{
LARGE_INTEGER startTime ;
double fFreq ;
public:
Timer() {
LARGE_INTEGER freq ;
QueryPerformanceFrequency( &freq ) ;
fFreq = (double)freq.QuadPart ;
reset();
}
void reset() { QueryPerformanceCounter( &startTime ) ; }
double getTime() {
LARGE_INTEGER endTime ;
QueryPerformanceCounter( &endTime ) ;
return ( endTime.QuadPart - startTime.QuadPart ) / fFreq ; // as double
}
} ;
inline float randFloat(){
return (float)rand()/RAND_MAX ;
}
// …Run Code Online (Sandbox Code Playgroud) 可能重复:
在基于范围的for循环内擦除容器中的元素
与此类似,您可以在使用新for( auto item : list )语法迭代STL列表时从STL列表中删除吗?
这是一个完整的例子(崩溃!)
#include <list>
using namespace std ;
int main()
{
list<int> li;
li.push_back( 4 ) ;
li.push_back( 5 ) ;
li.push_back( 6 ) ;
for( auto num : li )
{
if( num == 5 )
li.remove( num ) ;
else
printf( "%d\n", num ) ;
}
}
Run Code Online (Sandbox Code Playgroud) 在iOS中很容易获得加载的.wav文件中的字节数:
UInt64 dataSize = 0; // dataSize
UInt32 ps = sizeof(UInt64); // property size
if( AudioFileGetProperty(fileId, kAudioFilePropertyAudioDataByteCount, &ps, &dataSize) )
puts( "error retriving data chunk size" );
return dataSize ;
Run Code Online (Sandbox Code Playgroud)
但是在文档中我似乎无法找到有关如何确定PCM波形文件采样率的任何信息.
我已经将我的真实程序简化为一个玩具示例。
假设我有以下代码:
struct A
{
A( string i ) { }
A( string *i ) { }
};
int main()
{
string s;
A("HELLO"); // Works
A(&s); // XCode: Declaration of reference variable 's' requires an initializer
// Visual Studio: error C2040: 's': 'A &' differs in levels of indirection from 'std::string'
}
Run Code Online (Sandbox Code Playgroud)
我不明白错误消息。XCode“引用变量的声明需要初始化程序”是什么意思?为什么A("HELLO");有效而A(&s)无效?