Windows提供了许多用于同步线程的对象,例如事件(带SetEvent和WaitForSingleObject),互斥锁和关键部分.
我个人总是使用它们,特别是关键部分,因为我很确定它们会产生很小的开销,除非已经锁定.然而,看一些库,比如boost,人们在Windows上使用联锁方法实现自己的锁会遇到很多麻烦.
我可以理解为什么人们会编写无锁队列等等,因为这是一个专门的案例,但是有没有理由让人们选择实现自己版本的基本同步对象?
不知何故有人设法创建两个具有相同名称的文件夹,除了第一个字母的情况(例如"trunk"和"Trunk")导致svn更新失败(因为窗口不区分大小写,不允许创建两个文件夹) .
如何在Windows上恢复这些更改(并且无法直接访问svn服务器)?
我正在使用乌龟svn客户端,服务器是Unix(我猜它为什么它允许两个文件夹存在).
我想为我的项目创建一个安装程序,主要是为了处理数量开始增长的外部依赖项.
问题是这些组件中的大多数似乎以不同的方式分发,因此我需要一个能够应对以下所有内容的安装程序.我看过各种各样的东西,但是很多似乎并没有涵盖我需要的所有东西(比如如何使用Visual Studio安装项目安装directX ......),或者甚至没有创建一个合适的Windows安装程序(例如.msi).
例如,我得到了VS2008 SETP项目为我的应用程序文件和VC9 CRT的工作,但我看不出反正来告诉它只是与/无声参数运行dxsetup.exe且不将其和所有其他DX安装程序解压缩到应用程序目录或东西......
编辑:
如果我可以拥有x86和x86-64的统一安装程序,那将是非常好的,它安装正确的组件(例如myapp_x86.exe或myapp_x64.exe),具体取决于操作系统是否为64位.
EDIT2:
忘记提及,但是免费或低成本的解决方案也会受到欢迎,因为我需要一些解决方案来处理我的一些较小的个人资料.
我正在为某些东西编写一个快速服务器应用程序,所以不想编写完整的 GUI。然而问题是服务器的主要部分,但是控制台窗口一次只允许输入或输出。
我玩过的许多游戏都带有控制台(通常需要以某种方式激活),他们通过分离输入和输出来解决这个问题,这样底线专门用于输入输入命令,而其余部分用于输出就像普通的控制台窗口一样。
是否可以以最少的工作量(即无需从头开始编写自己的控制台窗口)并以跨平台的方式完成类似的事情?理想情况下,如果服务器在没有安装所有 GUI 内容的系统上运行,我仍然希望以某种方式使用正常的命令提示符,尽管我猜想一个可以与服务器连接的简单 GUI 客户端也可以。
我所说的跨平台是指需要 Windows 和 Linux 支持。虽然如果我使用客户端 GUI 路由 ID,那么除此之外还需要 Mac。
我有一大堆对象(可能是1000个),我需要将它存储在一个容器中.我需要能够以两种方式找到特定的实例,通过它的ID号(64位无符号整数)或其名称(std :: string).通常,ID将是最常见的,但在某些情况下,名称是已知的,但不是ID.
std :: map可以提供单个< - >值,但是我不确定是否有两组std :: map容器,一个用于ID,另一个用于字符串是最好的方法.
编辑 - 修改过的代码和错误:
好吧,我想我会尝试多索引,因为我还有提升,但是我似乎无法编译它,即使我已经完成了与文档完全相同的功能,据我所知:(
测试代码:
namespace common
{
class MyBaseClass
{
public:
typedef boost::uint64_t Id;
//name and id are constant, at least for the period im intrested in
//when I want it in the container...
const std::string &getName()const{return name;}
Id getId()const{return id;}
...other stuff...
};
}
class MyClass : public common::MyBaseClass
{
...other stuff...
};
typedef boost::multi_index_container
<
MyClass*,
boost::indexed_by
<
boost::ordered_unique<boost::const_mem_fun<MyBaseClass, MyBaseClass::Id, &MyBaseClass::getId > >,
boost::ordered_unique<boost::const_mem_fun<MyBaseClass, const std::string&, &MyBaseClass::getName> …Run Code Online (Sandbox Code Playgroud) 所以我理解CreateThread和CRT可能导致内存泄漏,信号不起作用,应该使用_beginthread或_beginthreadex函数.
在编写应用程序时,这一切都非常好,但那些正在编写dll的应用程序,以及其他应用程序(无论是普通的cll,com对象,插件等).没有办法保证调用DLL的线程是如何创建的,即使他们使用了__beginthread(ex),很可能他们有一个不同的CRT实现\版本.
那么程序员究竟应该做些什么呢?不使用CRT?产生一个内部线程并卸载所有工作(不使用带调用线程的CRT)?使用DllMain和附加/分离的一些技巧来正确设置和关闭所有线程,无论它们是如何创建的?
我有一个必须可以从C等使用的DLL,所以我不能正常使用字符串对象等,但我不知道如何安全地做到这一点..
const char *GetString()
{
std::stringstream ss;
ss << "The random number is: " << rand();
return ss.str().c_str();
}
Run Code Online (Sandbox Code Playgroud)
当ss从堆栈上掉下来时,c字符串会被破坏吗?我这么假装......
另一种选择可能是在堆上创建一个新的字符串,但是要解除分配的是什么?
const char *GetString()
{
std::stringstream ss;
ss << "The random number is: " << rand();
char *out = new char[ss.str().size()];
strcpy(ss.str().c_str(), out);
return out;//is out ever deleted?
}
Run Code Online (Sandbox Code Playgroud)
指向其他东西以及字符串的指针也是如此.
我需要从一个大容器中找到许多对象.
我能想到的唯一方法就是在循环中一次只搜索一个项目的容器,然而,即使是一个有效的搜索,平均情况下说"log n"(其中n是容器的大小),这给了我整个操作的"m log n"(其中m是我正在寻找的项目数).
这对我来说似乎非常不理想,而且作为我可能需要在频繁的基础上做的事情,我肯定希望在可能的情况下改进.
这两个部分都没有实现,所以我愿意接受关于主容器格式,我正在寻找的项目的"列表"等的建议,以及实际的搜索算法.
这些项是复杂的对象,但搜索键只是一个简单的整数.
我正在尝试找出支持 DirectXMath 的地方。我知道它旨在作为 Windows 8 的新事物,但没有宏检查(例如针对 _WIN32_WINNT),并且在我的测试中似乎至少在 Windows7 和 VS2013 上运行良好。与大多数 MSDN 文档不同,其文档页面上似乎没有“平台要求”部分...
这只是编译器的问题吗?
我正在尝试将HttpClient创建为支持NTLM和Basic身份验证的服务.在我的情况下,NTLM将无法工作,因为HttpClient机器处于与服务不同的域下(感谢公司决定非常缓慢地迁移正在使用的域的名称......).但是看起来HttpClient仍然会尝试使用它.
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials(
username, password));
HttpClient client = HttpClientBuilder.create()
.setDefaultCredentialsProvider(credentialsProvider).build();
HttpGet method = new HttpGet(uri);
HttpResponse response = client.execute(method);
Run Code Online (Sandbox Code Playgroud)
严重:[WARN] HttpAuthenticator - NEGOTIATE身份验证错误:未提供有效凭据(机制级别:未提供有效凭据(机制级别:无法找到任何Kerberos tgt))严重:[WARN] HttpAuthenticator - NTLM身份验证错误:凭据无法使用对于NTLM身份验证:org.apache.http.auth.UsernamePasswordCredentials
我只是想让它发送HTTP Authentication: Basic ...标头.我已经在任何Java HTTP框架之外测试了这个(例如使用带有手动创建的HTTP请求的原始ssl套接字),所以它似乎是一些Java/Apache HTTP问题,它尝试做我没有要求的事情而且真的不喜欢我希望它甚至试图做...