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

何苦借助假借内核之手呢

2013-01-02 
何必借助假借内核之手呢?本帖最后由 VisualEleven 于 2012-09-13 21:39:59 编辑//以下代码是来自一本书上

何必借助假借内核之手呢?
本帖最后由 VisualEleven 于 2012-09-13 21:39:59 编辑

//以下代码是来自一本书上的片段, 重叠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进程中的线程与磁盘直接交互,这个我们应用层的程序是控制不到的,除非是你能编写驱动层的读写程序

热点排行