如何以编程方式确定硬盘驱动器当前是否正在旋转(Windows 7或更高版本)?
我试过GetDevicePowerState()但它总是返回TRUE(总是1,而不是另一个非零值)我知道当前没有旋转的驱动器(内部和USB驱动器).GetDevicePowerState()返回后TRUE,如果我dir d:在控制台中发出,我会听到驱动器旋转,并且在生成目录列表之前有几秒钟的延迟.
我的代码需要检查驱动器上的目录是否存在.如果驱动器当前停止运转,则可以延迟或跳过检查.我想避免在旋转驱动器上进行检查有两个原因:1)检查当前是同步完成的,我不希望用户必须等待驱动器旋转2)我不想导致驱动器旋转只是为了进行检查(希望很明显为什么不这样做).
有没有办法做到这一点?
根据评论更新:
有人建议GetDevicePowerState使用物理设备名称但我不能让它返回除1以外的任何东西(同样,对于我已经验证的驱动器不旋转).以下是我正在使用的代码.如果GetDevicePowerState确实知道使用USB驱动器,我的论据可能有问题CreateFile吗?
for (int DriveNumber = 0; DriveNumber < 128; ++DriveNumber) {
TCHAR Drive[128];
_stprintf (Drive, _T("\\\\.\\PHYSICALDRIVE%d"), DriveNumber);
HANDLE hDevice = CreateFile(Drive, 0, FILE_SHARE_READ|FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
if (hDevice != INVALID_HANDLE_VALUE) {
BOOL DeviceIsOn = FALSE;
if (GetDevicePowerState(hDevice, &DeviceIsOn) != 0) {
_tprintf(_T("Physical Drive %d is Powered %s (DeviceIsOn=%d)\n"), DriveNumber, DeviceIsOn?_T("On"):_T("Off"), (int)DeviceIsOn);
}
CloseHandle(hDevice);
}
}
Run Code Online (Sandbox Code Playgroud) 假设我正在编写Derived并且必须继承Base,我无法控制并且有两个单独的构造函数和一个已删除的副本和移动构造函数:
struct Base {
Base(int i);
Base(const char *sz);
Base(const Base&) = delete;
Base(const Base&&) = delete;
};
struct Derived {
Derived(bool init_with_string);
};
Run Code Online (Sandbox Code Playgroud)
现在,根据another_param我必须使用构造函数或其他函数初始化我的基类的值; 如果C++不那么严格,那就像是:
Derived::Derived(bool init_with_string) {
if(init_with_string) {
Base::Base("forty-two");
} else {
Base::Base(42);
}
}
Run Code Online (Sandbox Code Playgroud)
(这对于计算值以直接表达式传递给基类构造函数/字段初始化器很麻烦的所有情况也很有用,但我很讨厌)
不幸的是,即使我没有看到特定的codegen或对象模型障碍这种事情,这不是有效的C++,我想不出简单的解决方法.
有什么方法我不知道吗?
我有一些问题和我的新Ubuntu 12.04 64安装.
我已经安装了sublime文本,我得到了两个,2/3,当我尝试安装EMMET时我们都给出了这个错误我已经研究了很多信息,也尝试手动安装PYV8,但它无法正常工作.
PyV8: Creating new thread
Emmet: Creating thread
Emmet: Loading https://api.github.com/repos/emmetio/pyv8-binaries/contents
Emmet: Loading PyV8 binary from https://raw.github.com/emmetio/pyv8-binaries/master/pyv8-linux64-p3.zip
Exception in thread Thread-30:
Traceback (most recent call last):
File "X/threading.py", line 639, in _bootstrap_inner
File "X/threading.py", line 825, in run
File "/home/zilashak/.config/sublime-text-3/Installed Packages/Emmet.sublime-package/emmet/pyv8loader.py", line 271, in run
return self.trigger('error', exit_code=self.thread.exit_code, progress=self)
File "/home/zilashak/.config/sublime-text-3/Installed Packages/Emmet.sublime-package/emmet/pyv8loader.py", line 290, in trigger
c(*args, **kwargs)
TypeError: on_error() got an unexpected keyword argument 'progress'
Run Code Online (Sandbox Code Playgroud)
所以,如果有人知道如何解决它,那么非常感谢你.
-------------------------------------------------- ---解决方案---------------------------------- !!!!!!!!!!!! !!!!!!解决了!!!!!!!!!!
解决方案适合所有人!!
好的,对于那些有这个问题的人来说,经过大量研究后我找到了解决方案(最后!)首先,安装python3.3
sudo apt-get install python-software-properties …Run Code Online (Sandbox Code Playgroud) 我无法让MASM接受写成的远程调用指令call 0f000h:1260h,可能是因为这个问题带来的问题.
我没有乱用神秘的MASM指令,而是决定使用DB手动将其编码到我的程序中,如下所示:
pushf ;IRET will be executed, push flags.
db 9ah,60h,12h,0,0f0h ;call location f000:1260.
;Location pointed to by int 1c (System timer tick)
;BIOS defaults it to a dummy IRET
Run Code Online (Sandbox Code Playgroud)
在使用DEBUG.COM跟踪程序时,我注意到在执行调用指令后出现"DB FE".但是,执行时不会发生这种情况int 1ch.跳转到位置f000:1260的这两种方法有什么区别?
我假设DEBUG没有将0xfe(以及后面的字节)识别为有效的操作码.我倾倒了位置f000:1260以查看哪些字节存在.
确实存在字节0xfe以及其他一些字节.我知道0xcf本身就是IRET的操作码(这是我期望找到的所有),那么这些其他字节是什么?
这是int 1ch位于0000:0070 的IVT条目.
UPDATE
正如Michael Petch在他的回答中所说,奇怪的字节构成了DOSBox的回调机制.我很想知道如果我试图在我的主程序中执行这个回调会发生什么.
执行:
xor ah, ah ;select set video mode function
mov al, 13h ;320x200 256 colors
db 0feh,38h,18h,00h ;set video mode DOSBox callback.
;Nothing pushed to stack.
Run Code Online (Sandbox Code Playgroud)
似乎与执行完全相同:
xor ah, ah …Run Code Online (Sandbox Code Playgroud) 尝试在最近(>=Vista)Windows 计算机上的许多 HTTPS 站点上使用 Python 3urlopen时,尝试在许多站点上执行操作时出现“SSL:CERTIFICATE_VERIFY_FAILED”错误urllib.request.urlopen(甚至在某些构建计算机上https://www.google.com/,但奇怪的是从来没有https://www.microsoft.com/)。
>>> import urllib.request
>>> urllib.request.urlopen("https://www.google.com/")
Traceback (most recent call last):
File "C:\Python35\lib\urllib\request.py", line 1254, in do_open
h.request(req.get_method(), req.selector, req.data, headers)
File "C:\Python35\lib\http\client.py", line 1106, in request
self._send_request(method, url, body, headers)
File "C:\Python35\lib\http\client.py", line 1151, in _send_request
self.endheaders(body)
File "C:\Python35\lib\http\client.py", line 1102, in endheaders
self._send_output(message_body)
File "C:\Python35\lib\http\client.py", line 934, in _send_output
self.send(msg)
File "C:\Python35\lib\http\client.py", line 877, in send
self.connect()
File "C:\Python35\lib\http\client.py", line 1260, in connect
server_hostname=server_hostname)
File …Run Code Online (Sandbox Code Playgroud) 我是c/c ++的新手,我对以下内容感到困惑:
<iostream>在example.h文件或example.cpp文件中放置标题?<iostream>,并且我将一个类的头文件包含在另一个类的头中,这是否意味着我包含了<iostream>两次?std::?什么在SQL Server中使用效率更高:pow(x,1/2)或sqrt(x)?哪一个成本更低,哪一个更快?
我一直想知道的一件事是,如果std::string我在C++代码中使用的实例使用相同的分配器,或者它们是否有自己独立的内存池?
显然,跨多个频繁创建和销毁的字符串共享单个内存池更有效.任何人都可以为我确认或否认这一点吗?
我认为可以肯定地说C语言环境被普遍认为是一个坏主意.
编写一个试图解析或编写基于文本的机器格式(经常发生)与C标准库函数的应用程序几乎不可能,如果您必须考虑将区域设置设置为不同的区域"C".由于locale通常是每个进程(并且setlocale通常不是线程安全的),如果你正在编写一个库或者你有一个多线程程序,那么即使setlocale(LC_ALL, "C")在做完你的东西之后做它并恢复它也是不安全的.
现在,由于这些原因,规则通常是"避免setlocale,期间"; 但是:过去我们被特殊的行为QCoreApplication和衍生类别咬了几次; 该文件说:
在Unix/Linux上,Qt配置为默认使用系统区域设置.这在使用POSIX函数时会导致冲突,例如,在浮点数和字符串等数据类型之间进行转换时,因为区域设置之间的符号可能不同.要解决此问题,请
setlocale(LC_NUMERIC,"C")在初始化后立即调用POSIX函数,QApplication或者QCoreApplication将用于数字格式的区域设置重置为"C"-locale.
这种行为已在另一个问题中描述; 我的问题是:这种看似愚蠢的行为的理由是什么?特别是,Unix和Linux的特殊之处只能在这些平台上做出这样的决定?
(顺便说一句,如果我setlocale(LC_ALL, "C");在创建之后就一切都会破坏QApplication?如果没关系,他们为什么不删除他们setlocale(LC_ALL, "");?)
昨天我看了VC++ 2010生成的一些32位代码(很可能;不知道具体的选项,对不起),我对一个奇怪的反复出现的细节很感兴趣:在许多功能中,它ebx在序言中归零,它总是像"零寄存器"一样使用它(想想$zeroMIPS).特别是,经常:
mov mem,imm大于1到4个字节mov mem,reg(即使对于0也必须编码完整的立即值大小),但通常(gcc)必要的寄存器被"按需"清零,并保持不变为了更有用的目的;cmp reg,ebx.这就是让我感到非常不寻常的事情,因为它应该完全相同test reg,reg,但是增加了对额外寄存器的依赖.现在,请记住,这发生在非叶子函数中,ebx经常被(被调用者)推入堆栈,因此我不相信这种依赖总是完全免费的.此外,它也用于test reg,reg在完全相同的方式(test/ cmp=> jg).最重要的是,"经典"x86上的寄存器是一种稀缺资源,如果你开始泄漏寄存器,你会浪费很多时间没有充分的理由; 为什么要浪费一个通过所有的功能只是为了保持零?(仍然,考虑一下,我不记得在使用这种"零寄存器"模式的函数中看到很多寄存器溢出).
那么:我错过了什么?它是一个编译器blooper还是一些令人难以置信的智能优化,在2010年特别有趣?
这是一段摘录:
; standard prologue: ebp/esp, SEH, overflow protection, ... then:
xor ebx, ebx
mov [ebp+4], ebx ; zero out some locals
mov [ebp], ebx
call function_1
xor ecx, ecx ; ebx _not_ used to zero registers
cmp eax, ebx ; ... …Run Code Online (Sandbox Code Playgroud) c++ ×4
assembly ×2
python ×2
windows ×2
x86 ×2
c++11 ×1
constructor ×1
dosbox ×1
hard-drive ×1
inheritance ×1
interrupt ×1
linux ×1
localization ×1
python-3.x ×1
pyv8 ×1
qt ×1
sql-server ×1
ssl ×1
stl ×1
sublimetext ×1
ubuntu ×1
urllib ×1
visual-c++ ×1
winapi ×1
x86-16 ×1