小编Fir*_*cer的帖子

为什么库在Windows上实现自己的基本锁?

Windows提供了许多用于同步线程的对象,例如事件(带SetEventWaitForSingleObject),互斥锁和关键部分.

我个人总是使用它们,特别是关键部分,因为我很确定它们会产生很小的开销,除非已经锁定.然而,看一些库,比如boost,人们在Windows上使用联锁方法实现自己的锁会遇到很多麻烦.

我可以理解为什么人们会编写无锁队列等等,因为这是一个专门的案例,但是有没有理由让人们选择实现自己版本的基本同步对象?

c++ windows multithreading synchronization locking

4
推荐指数
1
解决办法
472
查看次数

由于具有相同名称的文件夹,SVN更新失败,只是大小写不同

不知何故有人设法创建两个具有相同名称的文件夹,除了第一个字母的情况(例如"trunk"和"Trunk")导致svn更新失败(因为窗口不区分大小写,不允许创建两个文件夹) .

如何在Windows上恢复这些更改(并且无法直接访问svn服务器)?

我正在使用乌龟svn客户端,服务器是Unix(我猜它为什么它允许两个文件夹存在).

svn windows tortoisesvn svn-update

4
推荐指数
1
解决办法
1466
查看次数

为Visual Studio项目创建Windows安装程序

我想为我的项目创建一个安装程序,主要是为了处理数量开始增长的外部依赖项.

问题是这些组件中的大多数似乎以不同的方式分发,因此我需要一个能够应对以下所有内容的安装程序.我看过各种各样的东西,但是很多似乎并没有涵盖我需要的所有东西(比如如何使用Visual Studio安装项目安装directX ......),或者甚至没有创建一个合适的Windows安装程序(例如.msi).

  • 将我的所有应用程序文件复制到目标目录
  • 创建开始菜单和桌面快捷方式
  • 直接安装x(即调用dxsetup.exe/silent)
  • 安装VC9 CRT redist(似乎是一个"合并模块",看着msdn无论是什么......)
  • 如果满足下列条件之一,则仅需要管理权限
    • DirectX和/或VC9 CRT尚未存在或需要更新
    • 为所有用户安装
    • 安装到用户没有写入权限的目录
  • 如果安装在完成之前中止,可以回滚所有内容
  • 生成卸载程序和安装程序
  • 确保用户接受所有必需的EULA(我的一个,VC9 Redist,DirectX等)

例如,我得到了VS2008 SETP项目为我的应用程序文件和VC9 CRT的工作,但我看不出反正来告诉它只是与/无声参数运行dxsetup.exe且不将其和所有其他DX安装程序解压缩到应用程序目录或东西......

编辑:

如果我可以拥有x86和x86-64的统一安装程序,那将是非常好的,它安装正确的组件(例如myapp_x86.exe或myapp_x64.exe),具体取决于操作系统是否为64位.

EDIT2:

忘记提及,但是免费或低成本的解决方案也会受到欢迎,因为我需要一些解决方案来处理我的一些较小的个人资料.

windows installer visual-studio-2008

3
推荐指数
1
解决办法
3570
查看次数

C++ 实时控制台应用程序,同时输入和输出

我正在为某些东西编写一个快速服务器应用程序,所以不想编写完整的 GUI。然而问题是服务器的主要部分,但是控制台窗口一次只允许输入或输出。

我玩过的许多游戏都带有控制台(通常需要以某种方式激活),他们通过分离输入和输出来解决这个问题,这样底线专门用于输入输入命令,而其余部分用于输出就像普通的控制台窗口一样。

是否可以以最少的工作量(即无需从头开始编写自己的控制台窗口)并以跨平台的方式完成类似的事情?理想情况下,如果服务器在没有安装所有 GUI 内容的系统上运行,我仍然希望以某种方式使用正常的命令提示符,尽管我猜想一个可以与服务器连接的简单 GUI 客户端也可以。

我所说的跨平台是指需要 Windows 和 Linux 支持。虽然如果我使用客户端 GUI 路由 ID,那么除此之外还需要 Mac。

c++ io cross-platform console-application

3
推荐指数
1
解决办法
3710
查看次数

可能有多种键类型的关联数组?

我有一大堆对象(可能是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)

c++ containers associative-array

3
推荐指数
1
解决办法
1332
查看次数

线程创建,CRT和DLL是如何完成的?

所以我理解CreateThread和CRT可能导致内存泄漏,信号不起作用,应该使用_beginthread或_beginthreadex函数.

在编写应用程序时,这一切都非常好,但那些正在编写dll的应用程序,以及其他应用程序(无论是普通的cll,com对象,插件等).没有办法保证调用DLL的线程是如何创建的,即使他们使用了__beginthread(ex),很可能他们有一个不同的CRT实现\版本.

那么程序员究竟应该做些什么呢?不使用CRT?产生一个内部线程并卸载所有工作(不使用带调用线程的CRT)?使用DllMain和附加/分离的一些技巧来正确设置和关闭所有线程,无论它们是如何创建的?

c++ windows dll crt

3
推荐指数
2
解决办法
797
查看次数

将动态分配的内存从C++返回到C.

我有一个必须可以从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)

指向其他东西以及字符串的指针也是如此.

c c++ memory-management

2
推荐指数
1
解决办法
2700
查看次数

有效地在容器中查找多个项目

我需要从一个大容器中找到许多对象.

我能想到的唯一方法就是在循环中一次只搜索一个项目的容器,然而,即使是一个有效的搜索,平均情况下说"log n"(其中n是容器的大小),这给了我整个操作的"m log n"(其中m是我正在寻找的项目数).

这对我来说似乎非常不理想,而且作为我可能需要在频繁的基础上做的事情,我肯定希望在可能的情况下改进.

这两个部分都没有实现,所以我愿意接受关于主容器格式,我正在寻找的项目的"列表"等的建议,以及实际的搜索算法.

这些项是复杂的对象,但搜索键只是一个简单的整数.

c++ algorithm search

2
推荐指数
1
解决办法
872
查看次数

哪里支持 DirectXMath?

我正在尝试找出支持 DirectXMath 的地方。我知道它旨在作为 Windows 8 的新事物,但没有宏检查(例如针对 _WIN32_WINNT),并且在我的测试中似乎至少在 Windows7 和 VS2013 上运行良好。与大多数 MSDN 文档不同,其文档页面上似乎没有“平台要求”部分...

这只是编译器的问题吗?

c++ windows directx

2
推荐指数
1
解决办法
1463
查看次数

在Apache HttpClient 4.3.6上禁用NTLM

我正在尝试将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问题,它尝试做我没有要求的事情而且真的不喜欢我希望它甚至试图做...

java http apache-httpclient-4.x

2
推荐指数
1
解决办法
7522
查看次数