首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

何须借助假借内核之手呢

2012-09-16 
何必借助假借内核之手呢?C/C++ code//以下代码是来自一本书上的片段, 重叠io 读取文件{ // Was the operat

何必借助假借内核之手呢?

C/C++ code
//以下代码是来自一本书上的片段, 重叠io 读取文件{ // Was the operation queued ? if (GetLastError() == ERROR_IO_PENDING) { // We could do something else for awhile here... WaitForSingleObject(hFile, INFINITE); rc = GetOverlappedResult( hFile, &overlap, &numread, FALSE ); }


情景:单cpu机子上 执行以上代码

当线程执行到 WaitForSingleObject(hFile, INFINITE);的时候,cpu做了什么?调度其他线程执行。

以上代码就停止执行。,等待内核完成io,再返回来。


内核在执行io操作时候, 不也要依附于线程中吗,如果依赖于线程,那么 说白了读取io操作

还是靠线程实现的。何必借助假借内核之手呢?



[解决办法]
干活的都是线程。。。
[解决办法]
LZ这么多马甲

LZ去看看驱动开发之类的书,可能会找到启发
操作系统架构这样设计,你就得这样用
当中的CPU中断、IO同步之类的,不是用户态程序随便就控制的了

另外WaitForSingleObject(hFile, INFINITE);是错的,不能用文件句柄
[解决办法]
此段代码可能说的是重叠io 读取文件,其核心的思想是:
1、一般是独立线程执行磁盘IO,与主线程是不在一个线程内
2、当磁盘IO操作时CPU可以执行其他线程的工作,也就是那个WaitForSingleObject时主线程可以继续工作
3、内核执行IO操作时应该是system进程中的线程与磁盘直接交互,这个我们应用层的程序是控制不到的,除非是你能编写驱动层的读写程序

热点排行