问题标签 [c++]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
15240 浏览

c++ - 如何在 z/OS 上的 C++ 中使用 C 套接字 API

我在让 C 套接字 API 在 z/OS 上的 C++ 中正常工作时遇到问题。

虽然我包括sys/socket.h,但我仍然收到编译时错误,告诉我AF_INET未定义。

我是否遗漏了一些明显的东西,或者这是否与在 z/OS 上使我的问题变得更加复杂这一事实有关?

我发现有一个#ifdef我正在击中。显然 z/OS 并不高兴,除非我定义了我正在使用的套接字的“类型”:

现在,我个人不知道这_OE_SOCKETS实际上是为了什么,所以如果有任何 z/OS 套接字程序员在那里(你们三个),也许你可以给我一个关于这一切是如何工作的纲要?

测试应用

编译/链接输出:

检查 sys/sockets.h 确实包含我需要的定义,据我所知,它没有被任何#ifdef语句阻塞。

然而,我注意到它包含以下内容:

基本上封装了整个文件?不确定是否重要。

0 投票
5 回答
2768 浏览

c++ - BerkeleyDB 并发

  • BerkeleyDB 的 C++ 实现可以合理支持的最佳并发级别是多少?
  • 在吞吐量因资源争用而开始受到影响之前,我可以在数据库上敲击多少线程?

我已经阅读了手册并且知道如何设置锁的数量、储物柜、数据库页面大小等,但我只是想从具有 BDB 并发实际经验的人那里得到一些建议。

我的应用程序非常简单,我将获取和放置每个大约 1KB 的记录。没有游标,没有删除。

0 投票
10 回答
4820 浏览

c++ - 在这种情况下我应该使用嵌套类吗?

我正在研究一组用于视频播放和录制的类。我有一个主类,它的作用类似于公共接口,具有类似、、、等的方法......play()然后我有主力类,它们执行视频解码和视频编码。stop()pause()record()

我刚刚了解了 C++ 中嵌套类的存在,我很想知道程序员对使用它们的看法。我有点警惕,不确定有什么好处/缺点,但它们似乎(根据我正在阅读的书)可用于我的情况。

这本书建议在像我这样的场景中,一个好的解决方案是将主力类嵌套在接口类中,因此对于客户端不打算使用的类没有单独的文件,并避免任何可能的命名冲突?我不知道这些理由。嵌套类对我来说是一个新概念。只是想看看程序员对这个问题的看法。

0 投票
5 回答
2032 浏览

c# - 强大的随机数生成

我正在寻找不使用特殊硬件的高性能、相当强大的 RNG。它可以使用数学方法(Mersenne Twister 等),它可以从机器中“收集熵”,无论如何。在 Linux/etc 上,我们有一个drand48()生成 48 个随机位的。我想要一个用于 C++ 或 C# 的类似函数/类,它可以生成超过 32 位的随机性,并且低位与高位一样随机。

它不必是加密安全的,但它不能使用或基于 C 语言rand()或 .NET System.Random

任何源代码、源链接等将不胜感激!如果做不到这一点,我应该寻找什么类型的 RNG?

0 投票
5 回答
4091 浏览

c++ - 使用 Visual Studio 2005 为 Windows NT 4.0 构建?

我尝试迁移的 MFC 应用程序使用afxext.h,这会导致_AFXDLL设置,如果我设置会导致此错误/MT

请为 _AFXDLL 构建使用 /MD 开关

迄今为止,我的研究表明,使用 Visual Studio(在本例中为 C++)2005 构建在 Windows NT 4.0 上执行的应用程序是不可能的。

这是真的吗?有没有可用的解决方法?

0 投票
10 回答
2591 浏览

c++ - C++ 中易于使用的正则表达式支持?

我正在为本地 C++ 寻找一个健壮的、易于使用的正则表达式评估器,无论是平台独立的还是特定于 Windows 的。

要求:

  • 不能使用 Boost 或 ACE 正则表达式库(很遗憾)
  • 不能使用 .NET Regex(或任何托管代码)

主要要求是它应该是独立的和开放的。

0 投票
15 回答
37853 浏览

c++ - Win32下的堆损坏;如何定位?

我正在开发一个破坏堆的多线程C++ 应用程序。定位这种损坏的常用工具似乎不适用。源代码的旧版本(18 个月大)表现出与最新版本相同的行为,所以这已经存在很长时间了,只是没有被注意到;不利的一面是,源增量不能用于识别何时引入错误 -存储库中有很多代码更改。

崩溃行为的提示是在该系统中生成吞吐量 - 数据的套接字传输,该数据被转换为内部表示。我有一组测试数据会定期导致应用程序异常(各种地方,各种原因 - 包括堆分配失败,因此:堆损坏)。

该行为似乎与 CPU 功率或内存带宽有关;每台机器拥有的越多,就越容易崩溃。禁用超线程内核或双核内核会降低(但不会消除)损坏率。这暗示了一个与时间相关的问题。

现在问题来了:
当它在轻量级调试环境(比如Visual Studio 98 / AKA MSVC6)下运行时,堆损坏相当容易重现 - 十到十五分钟后,某些事情会发生可怕的失败和异常,例如alloc;在复杂的调试环境下运行时(Rational Purify,VS2008/MSVC9甚至微软应用程序验证程序)系统成为内存速度限制并且不会崩溃(内存限制:CPU没有超过50%,磁盘灯不亮,程序运行速度尽可能快,消耗1.3G2G RAM的盒子) . 因此,我可以在能够重现问题(但不能识别原因)或能够识别原因或我无法重现的问题之间做出选择。

我目前对下一步的最佳猜测是:

  1. 获得一个疯狂的盒子(替换当前的开发盒:2Gb RAM in an E6550 Core2 Duo);这将使在强大的调试环境下运行时重现导致错误行为的崩溃成为可能;或者
  2. 重写操作符new,并delete在完成后立即使用VirtualAlloc并将VirtualProtect内存标记为只读。运行MSVC6并让操作系统捕获正在写入释放内存的坏人。是的,这是绝望的迹象:到底是谁重写newdelete?!我想知道这是否会使它像 Purify 等人一样慢。

而且,不:不能选择内置 Purify 仪器。

一位同事刚刚走过,问“堆栈溢出?我们现在堆栈溢出了吗?!?”

现在,问题是:我如何找到堆损坏器?


更新:平衡new[]delete[]似乎在解决问题方面取得了长足的进步。现在,该应用程序在崩溃前大约需要两个小时,而不是 15 分钟。还没有。有什么进一步的建议吗?堆损坏仍然存在。

更新:Visual Studio 2008 下的发布版本似乎要好得多;STL目前的怀疑取决于VS98.


  1. 重现问题。Dr Watson将产生一个可能有助于进一步分析的转储。

我会记下这一点,但我担心 Watson 博士只会在事后被绊倒,而不是在堆被踩踏时。

另一种尝试可能是WinDebug用作调试工具,它非常强大,同时也是轻量级的。

现在又开始了:在出现问题之前没有太多帮助。我想在行为中抓住破坏者。

也许这些工具至少可以让您将问题缩小到某个组件。

我不抱太大希望,但绝望的时候需要...

您确定项目的所有组件都具有正确的运行时库设置(C/C++ tabVS 6.0 项目设置中的代码生成类别)吗?

不,我不是,明天我将花几个小时浏览工作区(其中有 58 个项目)并检查它们是否都在编译并与适当的标志链接。


更新:这需要 30 秒。选择对话框中的所有项目Settings,取消选择,直到找到没有正确设置的项目(它们都有正确的设置)。

0 投票
7 回答
2837 浏览

c++ - 确保始终捕获异常

C++ 中的异常不需要被调用函数捕获(没有编译时错误)。因此,是否使用 try/catch 捕获它们取决于开发人员的判断(与 Java 不同)。

有没有一种方法可以确保调用函数始终使用 try/catch 捕获抛出的异常?

0 投票
4 回答
2828 浏览

c# - 通过同一个开放套接字进行异步多向服务器 - 客户端通信?

我有一个客户端-服务器应用程序,客户端在 Windows Mobile 6 设备上,用 C++ 编写,服务器在完整的 Windows 上,用 C# 编写。

最初,我只需要它从客户端向服务器发送消息,而服务器只发回它收到消息的确认。现在,我想对其进行更新,以便服务器实际上可以向客户端发送消息以请求数据。正如我目前设置的那样,客户端仅在将数据发送到服务器后才处于接收模式,这不允许服务器随时发送请求。我将不得不等待客户数据。我的第一个想法是使用单独的打开套接字在客户端上创建另一个线程,监听服务器请求......就像服务器已经拥有客户端一样。有没有办法在同一个线程中使用同一个套接字,随时向所有服务器发送请求?

你可以使用一些东西来WaitForMultipleObjects()传递一个接收缓冲区和一个告诉它有数据要发送的事件吗?

0 投票
5 回答
5397 浏览

c++ - C++ 中的 CPU 节流

我只是想知道是否有一种优雅的方法可以为执行密集计算的特定线程设置最大 CPU 负载。

现在我找到了线程中最耗时的循环(它只进行压缩)并使用GetTickCount()Sleep()编码值。它确保循环持续一段时间,然后休眠一段最短时间。它或多或少地完成了这项工作,即保证线程不会使用超过 50% 的 CPU。
但是,行为取决于 CPU 内核的数量(巨大的劣势)和丑陋的(较小的劣势:))。
有任何想法吗?