2008年9月18日星期四

Windows Mobile 睡死之谜

Windows Mobile很容易出现"睡死过去"的现象,排除驱动程序的代码问题,那么还是可能"睡死过去"。
今天做了一个实验来模拟在suspend最后那一刻,对文件操作。结果,机器整个hang。

FILE *logFile;
FileSystemPowerFunction(FSNOTIFY_POWER_OFF);

logFile = _tfopen(TEXT("hello.txt"), TEXT("w"));

if (logFile != NULL)
{
_ftprintf(logFile, TEXT("%ld"), 12 );
fclose(logFile);
}

FileSystemPowerFunction(FSNOTIFY_POWER_OFF);是power manager在睡前最后几步必做的事情。而下面的写操作是模拟另一个线程在这个时刻后做写文件的操作。结果就是死亡。
这样的结构在实际开发中很容易形成,要特别小心。

没有评论: