小编Phi*_*all的帖子

C++中的可扩展服务器框架

我期待用C++编写一个服务器应用程序,用于同时处理数万个客户端.它应该在Windows和Linux下运行.我一直在寻找框架和库,并遇到了Boost Asio,这似乎是一个非常成熟和广泛使用的替代品.我只是在绞线/线程池周围缠绕我很困难,主要是因为有数百万个模板.我的背景主要是在C中,所以我并不习惯Boost一般似乎充满了模板的混乱.我试图找人开发围绕升压短耳相对较薄的包装将采用股,绑定等的照顾线程/同步方面的,但一直未能找到一个还没有谁可以在我的预算之内做到这一点(2或300美元).

您是否可以推荐任何其他可扩展的库以及Boost Asio(例如,在Windows上使用IOCP,在Linux上使用epoll等),或者我可能会找到熟练的Boost开发人员寻找较小的自由职业的来源?

非常感谢您的任何帮助.

亲切的问候,

Philip Bennefall

c++ epoll iocp scalable boost-asio

12
推荐指数
1
解决办法
1万
查看次数

游戏的公共领域琐事数据库?

我的一个朋友正在用C++制作一个琐事游戏,我代表他询问是否有任何公共领域的琐事数据库?它应该最好采用csv样式格式,以便易于解析,但其他格式也可以,只要问题是好的,许可证是公共域名?有没有人有任何提示.

c++ csv

9
推荐指数
1
解决办法
9440
查看次数

如何在遗传算法中进行基于秩的选择?

我正在实现一个小的遗传算法框架 - 主要是供私人使用,除非我设法做出合理的事情,我将把它作为开源发布.现在我专注于选择技术.到目前为止,我已经实施了轮盘赌选择,随机通用抽样和锦标赛选择.我的列表中的下一个是基于排名的选择.与我已经实现的其他技术相比,我在查找相关信息方面遇到了一些困难,但到目前为止,这是我的理解.

  1. 如果你的人口中有你想让下一轮的合理父母,你首先要通过它,并将每个人的适应度除以人口中的总体适应度.

  2. 然后你使用其他一些选择技术(如轮盘赌轮)来实际确定选择谁进行繁殖.

它是否正确?如果是这样,我是否正确地认为排名调整是一种预处理步骤,然后必须采用实际选择程序来挑选候选人?如果我误解了这一点,请纠正我.我很感激任何额外的指示.

roulette-wheel-selection selection stochastic genetic-algorithm

8
推荐指数
2
解决办法
2万
查看次数

全文搜索仅匹配某些单词?

我最近开始使用SqLite,所以我比较新.我正在尝试使用全文搜索功能来查找聊天机器人的粗略匹配.基本上我想匹配尽可能多的关键字,但不一定全部匹配.结果应根据短语中找到的关键字数量以及它们与查询的排序程度进行排序.换句话说,排序不一定是精确的,但越接近,结果应该排名越高.类似地,即使发现短语中只有一个或两个单词,它应该匹配,但是在存在的单词中越多,排名越高.我已经阅读了参考文献,我看到了NEAR语句和matchinfo函数,以及如何使用它的示例,但我无法弄清楚如何将这些知识应用于我的具体问题.有没有人有什么建议?

在此先感谢您的帮助.

c sql sqlite

7
推荐指数
1
解决办法
1118
查看次数

将Skype连接到Asterisk

我正在开发Asterisk PBX,如果可能的话我想链接到Skype帐户.这个想法是人们会调用特定的Skype用户名,并被重定向到我的SIP,并通过它转发给Asterisk.这可行吗?我环顾四周,看到Skype for Asterisk驱动程序,但当然已经停止了.还有其他选择吗?我不想通过普通的PSTN电话网络,而是通过SIP直接从Skype到Asterisk.如果您有关于如何配置我的sip.conf以使其工作的任何提示,这也将非常感激.

asterisk skype sip

7
推荐指数
2
解决办法
2万
查看次数

条件变量死锁

我的代码中有一个与使用条件变量相关的死锁问题.这更像是一个设计问题,而不是纯粹的代码问题.一旦我理解了正确的设计,我就没有问题.我有以下场景:

  1. 线程A等待条件变量.
  2. 线程B调用notify_all,线程A唤醒.

这当然是我想要发生的事情,并且当一切按预期工作时会发生什么.但有时候,我会得到以下情况:

  1. 线程A在开始等待条件变量之前执行代码.
  2. 线程B调用notify_all,认为线程A正在等待.
  3. 线程A开始等待条件变量,没有意识到线程B已经告诉它停止等待.僵局.

解决这个问题的最佳方法是什么?我想不出一个可靠的方法来检查线程A是否实际上正在等待,以便知道何时应该在线程B中调用notify_all.我是否必须求助于timed_lock?我讨厌.

c++ multithreading synchronization

7
推荐指数
1
解决办法
4391
查看次数

人工智能库

我正在寻找在游戏中有用的人工智能算法的C和C++实现.我最感兴趣的一些是强化学习算法,遗传算法和神经网络.然而,任何其他人都很有趣.

我发现dlib.net它有一些非常迷人的机器学习算法,但这些似乎并不特别适合游戏.


我可以使用的许可证是Boost软件许可证,Zlib/Libpng许可证和公共域.任何属于这些许可证的图书馆的任何建议都将受到高度赞赏.

c++ algorithm artificial-intelligence machine-learning game-ai

6
推荐指数
1
解决办法
1万
查看次数

生成基于硬件的computerID

我有一个关于为许可目的生成特定计算机ID的问题.优选地,该ID应该是基于硬件的,因此如果用户重新格式化则不应该改变.此外,用户改变生成ID的信息也不容易(或者甚至不可能).目前我只有两个组合,CPUID标准和功能标志以及机器中第一个物理驱动器的几何和总大小.虽然这似乎是适合大多数普通PC的,很多上网本,例如都使用完全相同的硬件制成,所以你会得到相同的ID在这种情况下,许多机器.您能否建议我可以使用其他一些硬件组件?

我有两个要求:

  1. 它不能使用WMI.

  2. 它必须在许多情况下工作(包括没有权限或权限很少的用户).我想过使用物理驱动器的序列,但如果用户不在管理员模式下,这似乎很难检索.

我在Windows上使用C++.

在此先感谢您的任何建议.

亲切的问候,

Philip Bennefall

c++ windows hardware unique

5
推荐指数
1
解决办法
6582
查看次数

反调试 - 防止内存转储

我试图在我的应用程序中实现一些基本的反调试功能.我特别想关注的一个方面是试图阻止人们轻松地从我的应用程序中获取可用的内存转储.我在http://www.codeproject.com/KB/security/AntiReverseEngineering.aspx上阅读了这篇文章

这给了我很多关于如何检测是否存在调试器的技巧,以及有关如何防止内存转储的一些信息.但作者指出,应该注意使用这些技术,例如删除内存中的可执行标头.他提到操作系统或其他程序可能有时会想要使用这些信息,但我看不出是出于什么目的.

有没有人得到一些关于如何阻止逆向工程师抛弃我的程序的其他提示?

我在Windows上.

亲切的问候,

Philip Bennefall

memory debugging dump

5
推荐指数
1
解决办法
4166
查看次数

共享库中的内部异常终止最终用户应用程序

我正在构建一个内部使用Boost.thread的共享库.因此,Boost.system也被使用,因为Boost.thread依赖于此.我的共享库导出了一个C接口,所以我想隐藏最终用户的所有内部异常处理和线程使用等.可以说它应该是一个黑盒子.但是,当我与客户端应用程序链接时,程序运行正常 - 只要是时候通过调用库函数来停止处理我得到:

在抛出'boost :: thread_interrupted'的实例后终止调用

我在库内部捕获了这个异常,所以我不知道为什么它实际上没有被捕获.最终用户的程序无意以任何方式了解或处理Boost异常.在构建共享库时,我对Boost.thread和Boost.system都使用静态链接,因此外部世界从不打算看到它们.我在Ubuntu 12上的GCC 4.7上.在Windows上,我没有这样的问题(MSVC或MinGw都没有).

(编辑)

我正在编辑问题,以显示根据评论中的请求重现问题的简约示例.

首先是testlib.cpp和testlib.h的代码.

testlib.cpp:

#include <boost/thread/thread.hpp>

void thread_func()
{
while(1)
{
boost::this_thread::interruption_point();
}
}

void do_processing()
{
// Start a thread that will execute the function above.
boost::thread worker(thread_func);

// We assume the thread started properly for the purposes of this example.

// Now let's interrupt the thread.
worker.interrupt();

// And now let's wait for it to finish.
worker.join();
}

现在testlib.h:

#ifndef TESTLIB_H
#define TESTLIB_H

void do_processing();

#endif

我使用以下命令将其构建到共享库中:

g ++ …

c++ ubuntu g++ exception

5
推荐指数
1
解决办法
1196
查看次数

具有自由许可证的跨平台Gui库

我正在寻找一个可用于创建对话框的跨平台gui库,它必须符合以下要求:

  1. 用C或C++编写.

  2. 至少与Windows,Mac和Linux兼容.

  3. 比较成熟.

  4. 在编译表格中分发的衍生作品文件中不需要版权文本的许可.良好许可证的示例包括Zlib/libpng许可证,Boost软件许可证以及公共域名.不可用的许可证包括LGPL,BSD,麻省理工学院等.

有人有任何提示吗?

亲切的问候,

Philip Bennefall

c c++ user-interface

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

内存转储分析(应用程序挂起)

我正在尝试分析在应用程序发生挂起后从一位最终用户那里收到的内存转储。它似乎与我的应用程序的音频播放部分有关。我相信涉及两个线程,即将开始播放声音的主线程和一个更新器线程,它迭代链接列表中的声音以不断更新它们的状态。然而,我不明白挂起的根源是什么。

我的 WinDbg 知识有限,但我设法发现挂起似乎发生在音频库的 SetLoop 方法内部(特别是在静态声音代码中)。我使用 DirectSound,在本例中应用程序在 Windows 7 32 位上运行(我自己在 XP 上进行开发,从未遇到过这样的问题)。静态声音类在检查声音是否正在播放之前锁定关键部分,如果没有,则将循环标志设置为 true 或 false。在本例中,主线程正在调用 SetLoop 将其设置为 false,因为它希望以非循环状态播放声音。我可以看到,在挂起时,主线程陷入了对 ntdll.dll 中 EtwEventEnabled 的调用中,这显然是由静态声音类的 SetLoop 方法进行的。我想知道它是否卡在 EnterCriticalSection 调用中,或者当它调用 DirectSound 的辅助缓冲区的 GetStatus 方法时卡在更靠下的某个地方?这就是我对内存转储分析的了解不足的地方,如果有人愿意花时间查看转储,我将非常感激。

以下是转储的链接,其中包含应用程序特定的符号: https: //dl.dropbox.com/u/5121962/hangdump.zip

预先非常感谢您的帮助。

c++ windows debugging directsound freeze

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

如何保护加密密钥免受逆向工程的影响?

我的软件使用的是AES Rijndael.

我使用SHA-256哈希从具有任意长度的字符串生成密钥,然后将其作为私钥和公钥传递,因为在这种情况下我不需要区分这两者.

如何保护我的密钥不被可执行文件侵入?

我知道不要使用文字,而是在运行时使用一些预定的步骤生成密钥,但是所有相同的密钥在发送到AES初始化函数之前仍然在内存中,因此可以非常容易地检索.

AES显然非常安全,但是如果有人打破了可执行文件,那对我有什么好处?

解决这个问题时有一些常见的做法吗?

security aes rijndael encryption-symmetric

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