草庐IT

c++ - 事件驱动编程 : callback vs message polling

作为一名C++程序员,我一直在研究OpenGL编程,并且看到了处理事件驱动编程的两种主要方式:消息轮询或回调函数。我看到原生Win32API使用了一个回调函数,它是由DispatchMessage函数触发的。SDL(基于教程)也使用某种回调或类似回调的编程。GLFW也使用回调。SFML允许程序员轮询代码中任何位置的单个消息,通常在一个循环中,形成消息循环。根据我所见,XWindow系统也使用消息轮询。显然,由于事件系统存在于突出的环境中,因此每个系统都必须具有优势。我希望有人能告诉我每个的优点和缺点。我正在考虑编写一些严重依赖于事件驱动编程的程序,并希望就采用哪条路径做出最佳决定。

c++ - 找出调用 __fastfail 的原因

我有一个我不熟悉的巨大代码库,程序异常终止,因为某个地方的线程正在调用__fastfail。这是基于以结尾的消息...Fatalprogramexitrequested.调用堆栈没有符号,因为它位于C++2015运行时(ucrtbase.dll)中。该调用似乎是在我的主线程以外的线程上进行的。这个神秘的线程只在问题发生之前启动,所以我无法在调试器中捕捉到它启动的行为-我不知道是什么启动了它,也不知道是什么导致了整个过程。我在我的main()中使用__try/__catch有SEH,所以任何未处理的异常都应该被困在那里。相反,我猜测某些地方会冒泡到运行时并导致__fastfail。我试过

c++ - 其他线程是否会在合理的时间内看到对 `volatile` 字大小变量的写入?

当询问morespecificproblem时我发现这是人们不确定的核心问题。可以做出以下假设:CPU确实使用了像MESI(F)这样的缓存一致性协议(protocol)(例如:x86/x86_64和ARMv7mp)假定变量的大小由处理器自动写入/读取(对齐和native字大小)变量被声明为volatile问题是:如果我在一个线程中写入变量,其他线程会看到变化吗?其他线程看到变化的时间范围的数量级是多少?您是否知道缓存一致性不足以确保跨CPU/跨核心可见性的架构?问题不是:使用这样的变量安全吗?关于重新排序问题关于C++11原子这可能被认为是InC/C++,arevolatilevari

c++ - 优化文件打开和读取

我有一个在Windows上运行的C++应用程序,它每15分钟唤醒一次以打开和读取目​​录中的文件。每次运行时目录都会更改。打开由ifstream.open(file_name,std::ios::binary)执行读取由streambufios::rdbuf()*执行*每15分钟的文件总数约为50,000文件以20个为一组打开和读取每个文件的大小在50KB左右对于每次运行;此操作(打开和读取)在磁盘主轴速度为6000RPM的双核机器上大约需要18-23分钟。我捕获了内存页面错误/秒,它们在8000–10000的范围内。有没有办法减少页面错误并优化文件打开和读取操作?高瑟姆

c++ - boost::未排序模式的精神语法

我有一个模型的模式部分需要解析。假设它看起来像下面这样。{type="Standard";hostname="x.y.z";port="123";}属性是:元素可能显示为无序。所有属于架构一部分的元素都必须出现,不能有其他元素。所有元素的综合属性都放入一个结构中。(可选)模式在未来可能取决于类型字段——即,基于类型的不同字段——但我目前并不关心这一点。 最佳答案 根据Sprite论坛,答案如下。Youmightwanttohavealookatthepermutationparser:a^b^cWhichmatchesaorborc

c++ - 从哪里获得自定义 Visual Studio 2008 语法突出显示(复杂的)

好吧,我曾经看到过更多的语法高亮显示,而默认的语法高亮显示在VS2008中真的很有限,所以我在想,是否有这样的高亮显示:定义的变量会有自己的颜色。定义的函数会有自己的颜色。预定义函数会有自己的颜色(来自库等,可能会有自己的列表)。常量/枚举有自己的颜色。typedefs/defs会有自己的颜色。字符串(引号之间的东西)会有自己的颜色。floats/double的颜色会有所不同(会检查1.0f或1.0等)因为这太棒了,我以前没有在任何语法高亮系统中见过1,2,4,5,如果有这样的系统就好了。这会大大加快编程速度,因为如果我犯了错误,我会在编译前立即看到它。我看了一些MSDN网站,做起来非

c# - 需要帮助选择数据库服务器

大家好。最近我接到了一项任务,要开发一个应用程序来自动化股票交易的某些方面。在处理初始架构时,出现了数据库困境。我需要的是一个快速的数据库引擎,它可以非常快速地处理大量传入的数据。我在一般编程方面相当有经验,但我从未面临过开发高负载数据库架构的任务。在我的一个项目中,我开发了一个简单的MSSQL数据库模式,其中包含多个多对多关系,仅此而已。我正在寻找一些关于选择最合适的数据库引擎的建议,以及一些对描述高负载数据库开发的各种手册或书籍的指示。具体项目如下:操作系统:WindowsNT系列(Server2008/7)主要平台:.NET和C#数据库结构:一个表用于保存主要项目,两个或三个表具

c++ - 编译器以获得更好的模板支持

以下哪个C++编译器更好地考虑C++模板(+发出的错误消息)?g++clang科莫cl.exe(MSVC++)icl.exe(英特尔C++) 最佳答案 我更喜欢Comeau,因为它符合标准。Clang发出的错误消息aremoreuseful比那些由g++发布的。MSVC++的编译器已损坏[没有两阶段名称查找]。 关于c++-编译器以获得更好的模板支持,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/q

C++ 内存分配器架构

我需要在Linux下为C++编写Hoard分配器。虽然算法非常简单,但我不明白在哪里(以及如何)存储分配器数据(例如堆)这就是我的看法:分配器不是一个进程,它是一组函数,任何应用程序都可以使用。每个应用程序都有自己的堆。应用启动时发生了什么?分配器如何发现堆已经创建?分配器如何创建、存储和销毁(关闭应用程序时)堆?当调用函数时,如何找出它运行在哪个线程(或哪个处理器)? 最佳答案 在应用程序启动期间可能不会发生太多事情,除非分配器被设计并挂接到应用程序启动代码中以抢先从操作系统请求一些内存。堆并不是真正创建的。分配系统退出并在需要时

c++ - Linux、Eclipse CDT 以 su 运行

我正在使用EclipseCDT编写应用程序。该应用程序使用第三方API,需要以sudo运行,以打开原始套接字等。在命令行中,我可以像这样运行程序su./program但是在EclipseCDT环境下,按Ctrl+F11(Run->RunLastLaunched)是不行的,我猜是因为我的LinuxGUI登录不是su。无论如何,我可以在EclipseCDT中以su(使用su密码)运行吗?谢谢。 最佳答案 您有一些选择:以根用户身份运行Eclipse。(恕我直言,这不是一个好主意,但这是最简单的一个)暂时允许您的用户使用该库。(可能会很乱