Articles of 语言不可知

哪些操作系统/平台实现等待变形优化?

哪个主要的操作系统/平台实现等待变形? 这个问题出现时,我发现没有明确的最佳做法是否应该通过locking互斥信号发出一个条件variables。 一个典型的build议是在locking的时候发出信号,除非分析显示从解锁(通过移除额外的上下文切换)显着地改善了性能。 IIUC,在信令是额外的两个上下文切换时保持锁的唯一缺点; 优点是错误的风险较低,并且更容易实现实时的可预测性。 所以,如果实施等待变形,那么在信号传输的情况下保持locking的做法是非常好的。

我怎样才能区分同一个文件的两个部分?

我有一个源文件,有两个相似但又有细微差别的部分。 我想将这两个部分合并为一个子程序,并带有一个处理细微差别的参数,但是我需要确保我知道它们,所以我不会错过任何一个。 我通常在这种情况下做的是复制每个部分到一个单独的文件,然后使用tkdiff或vimdiff来突出差异。 有没有办法跳过中间文件,只是区分同一个文件的两个部分?

创build未刷新的文件输出缓冲区

我正在尝试清除在Linux上运行的几种程序中使用不同语言的未刷新文件I / O缓冲区时出现的问题。 冲洗缓冲区的解决scheme是很容易的,但这个无刷新缓冲区的问题发生得非常随机。 我不想就可能导致的原因寻求帮助,而是关心如何创造(复制)和诊断这种情况。 这导致了一个由两部分组成的问题: 人为地和容易地构build一个例子,在给定的时间内,可以有已知的输出缓冲区不被刷新的情况是否可行? 我的search是空的。 一个微不足道的基准就是在尝试从另一个进程写入大量数据的同时,在一个进程中锤击硬盘(例如交换)。 虽然这个“有效”,但它使系统实际上无法使用:我不能戳,看看发生了什么事。 Linux内部是否有可以识别给定进程已经清除文件输出缓冲区的命令? 这是可以在命令行运行的东西,还是有必要直接查询内核? 我一直在看fsync , sync , ioctl , flush , bdflush等等。 但是,缺乏创build未刷新缓冲区的方法,目前还不清楚这些可能会显示什么。 为了复制他人,C中的#1例子将是非常好的,但问题是真正的语言不可知论 – 只要知道创build这种情况的方法将有助于我正在工作的其他语言。 更新1:我对任何混淆道歉。 正如有几个人指出的,缓冲区可以在内核空间或用户空间中。 这有助于查明问题:我们正在创build大的脏内核缓冲区。 这个区别和答案完全解决了#1:现在似乎很清楚如何在用户空间或内核空间中重新创build未刷新的缓冲区。 但是,识别哪个进程ID具有脏内核缓冲区还不清楚。

在Linux上运行可执行文件最安全的方法是什么?

我试图运行一个程序从一个未知来源的C代码编译。 我想确保程序不会伤害我的系统。 例如,程序可能有类似system("rm -rf /")的源代码,除非代码被彻底检查,否则这是不可检测的。 我想到了以下两种方法 在像VMWare这样的虚拟机内运行它 在linux上构build一个Windows EXE文件,然后在wine上运行 两者都不是非常优雅的解决scheme,我不能自动化他们。 而且在1的情况下,可能会损害虚拟机。 任何帮助,将不胜感激。 我想用我们可以称之为“沙箱”的方式运行程序。

如何在Windows中获取当前的交互式用户会话数量?

我正在编写一个Windows服务,需要知道当前是否有任何用户在机器上login。 到目前为止,我已经尝试过Win32_LogonSession (WMI)和LsaEnumerateLogonSessions / LsaGetLogonSessionData (secur32.dll)。 这两个工作,似乎都返回相同的数据,但它们太慢,无法更新时,用户注销: 系统启动时,返回“0个交互式用户”。 (好) 当我login时,他们返回“1交互式用户”。 (好) 但是,当我注销时,用户数保持为1.新login后,数为2,依此类推。 因此Win32_LogonSession和LsaEnumerateLogonSessions都不够好。 在最后一个交互式用户离开后的5分钟内,该服务需要知道。 SysInternals的LogonSessions.exe甚至没有提供最新的答案。 此外,答案不能是“监视login和注销事件,并有一个计数器variables”,因为服务可以在任何时候启动。

在任何Windows应用程序中获取打开文档的path和文件名

目标 首先让我从我的最终愿景开始:首先在Windows中,我希望能够使用我定义的全局键盘快捷键(例如, Ctrl + Alt + C )来复制打开的文档在前台应用程序中的完整path和文件名到剪贴板。 例如,这将对后续将path和文件名粘贴到电子邮件客户端的“打开文件”对话框中,以将该文档附加到电子邮件中而无需手动浏览到文件系统中的目标文档很有用。 具体问题 现在,如何做到这一点,我有兴趣在如何实现的具体部分是: 如何获得任何当前正在运行的Windows应用程序的当前“打开文档”的path和文件名。 (如果这不能在任何 Windows应用程序中完成,那么下一个最好的方法就是尽可能多的应用程序。 显然,这不适用于某些不必具有与本地文件系统上的文件相对应的“当前打开的文档”概念的应用程序,例如电子邮件客户端,IM客户端或(通常)a网页浏览器。 特定应用解决scheme 我知道可以编写特定于应用程序的解决scheme来执行此操作。 例如,以下MS Word VBA子例程将复制Word中打开的文档的文件名和path到剪贴板: Dim myDataObject As DataObject Set myDataObject = New DataObject myDataObject.SetText ActiveDocument.FullName myDataObject.PutInClipboard 但是,我真正想要的是对于我的系统上的任何应用程序(或者对于尽可能多的应用程序,尽可能合理地运行),无需为每个应用程序尝试编写特定于应用程序的解决scheme。 想法:最近的文档文件夹 一个想法:最近的文档文件夹(和/或其底层的Windows API)可以用来帮助这个吗? 它似乎有关于我在这里感兴趣的“打开文档”的相同概念的信息,显然适用于各种应用程序types。 (看看我的机器上最近的文档文件夹的内容,我看到那些显然是用各种应用程序打开的文件,包括MS Word,MS Excel,Eclipse,Adobe Acrobat Reader,Paint.NET,TOAD,和记事本2)。 首选解决scheme语言 我更喜欢 C#或C ++代码中的解决scheme,但我愿意接受任何关于如何执行此操作的build议,而不考虑实现语言! Windows 7的? 2009年11月更新:既然Windows 7已经广泛使用,那么我认为可能值得回到这个问题并问:Windows 7是否提供了任何新的API或者其他机制来帮助我尝试在这里完成?

用任何可取的语言closures连接在局域网中的远程计算机

我想closures远程Windows计算机(例如连接在局域网中的Windows计算机)。我尝试了很多,但找不到解决scheme。 有没有人有关于如何closures远程计算机的想法? 任何语言都可以工作。

在Windows下获取新线程/删除线程的通知

当你创build一个DLL时,你可以在DllMain函数(DLL_THREAD_ATTACH / DLL_THREAD_DETACH)中得到关于新线程/退出线程的通知。 有没有办法在(非托pipe)可执行文件中从Windows获取这些或等效的通知?

Windows应用程序事实上的标准键盘快捷键列表?

假设我正在为Windows开发一个新的桌面应用程序。 是否有一个列表,我可以咨询(从微软或第三方)的所有Windows应用程序应该支持的键盘快捷键? (注意:当我在这里说“所有的Windows应用程序”时,我的意思是“所有Windows应用程序的特定键盘快捷方式都是合理的”。例如,标准的“开始debugging会话”快捷方式在Visual Studio和Eclipse,但不适用于其他types的应用程序,如记事本或Firefox。另外,某些专门的应用程序可能没有意义,这些应用程序拥有自己的完整自定义键盘快捷键集,比如vi,遵循一些遵循的标准惯例由其他应用程序。) 例如,我会争辩说,Windows应用程序应该支持以下键盘快捷方式,因为它们是大多数其他应用程序支持的事实上的标准(只是部分列表): 从任何地方: F1 – 显示帮助 Alt + F4 – closures应用程序 在编辑文字时: Ctrl + A – select所有文本(在当前字段中,如果适用) Ctrl + Home / End – 将插入符号移动到当前字段的开始/结束位置 Shift + [任意导航] – select前一个插入位置和新插入位置之间的文本 在select可以编辑或重命名的项目时: F2 – 重命名或编辑当前项目 虽然子窗口或选项卡具有多窗口/多选项卡应用程序的重点: Ctrl + F4 – closures当前窗口/选项卡 Ctrl + W – closures当前窗口/选项卡 Ctrl + Tab / Ctrl + Shift + […]

进程地址空间vs虚拟内存

从我的理解,通过阅读几篇文章,我假设进程地址空间(PAS)和虚拟内存(VM)是相同的。 我的理解是否有缺陷? 请问一些人可以点亮这个灯并点亮我? 我很困惑。 我了解进程地址空间与Ram或物理内存无关。 但是只是混淆了PAS和VM。