这是第三章第二个程序,学习程序执行顺序的,我加了一句.
void main()
{
CWinApp* pApp = AfxGetApp();
pApp->InitApplication();
pApp->InitInstance();
//下面这句是我加的测试语句
printf("test\n");
pApp->Run();
}
结果显示是test在最前面,而InitApplication();和InitInstance();里都有打印字符串的语句,但结果却在test的后面显示出来,这是为什么?我不管把这条test语句放在main的什么地方结果都是这样!而我用断点来测试,显示执行顺序是没有错误的,只是前面三句执行的时候都没有显示东西,printf("test\n")则直接显示出来了.
请问这是为什么,它们的执行顺序到底是怎么样的,请大虾们给本菜鸟提个醒,俺加分给您!!!
16 个解决方案
#1
猴哥的书我没看过,所以具体怎么回事也不清楚。你试着跟踪到InitInstance中看一下
#2
这说明前两个函数都不是阻塞的,这样printf才会在它们调用输出之前执行到。
#3
to luxes:
什么意思? 不懂! 什么是阻塞的? 到底怎么回事情?
什么意思? 不懂! 什么是阻塞的? 到底怎么回事情?
#4
为什么还没有人回答我的问题? 这个问题很复杂吗?
#5
printf("test\n");
pApp->Run();
把这两条语句对调一下;看看先,
不行就想想
pApp->InitApplication();
pApp->InitInstance();
这两条里面用的什么写的?
也改成printf();
再不行你把你的机器杂烂,一定可以搞定!(电脑说:别打了,别打了,我招……我招就是了……)
pApp->Run();
把这两条语句对调一下;看看先,
不行就想想
pApp->InitApplication();
pApp->InitInstance();
这两条里面用的什么写的?
也改成printf();
再不行你把你的机器杂烂,一定可以搞定!(电脑说:别打了,别打了,我招……我招就是了……)
#6
to AntGhazi:
我对调了呀,我不是说过了吗,我把"printf("test")放在哪儿都一样,都是这个结果!!
InitApplication()里面有 .TextOut(" dfasdf")等语句的
我对调了呀,我不是说过了吗,我把"printf("test")放在哪儿都一样,都是这个结果!!
InitApplication()里面有 .TextOut(" dfasdf")等语句的
#7
就是说,你的程序启动线程以后(pApp->InitApplication();pApp->InitInstance();),main里的代码还在网下走,先走到printf.而这时线程里的代码printf还没有执行到。
你加个Sleep(200)在Main里的Printf前看看效果吧
你加个Sleep(200)在Main里的Printf前看看效果吧
#8
在你调CWinApp::Run前,你的程序还没有建立消息循环,所以不能处理消息,你用TextOut写 的东西都要等到窗口重画时才显示出来!
#9
窗口重画是由WM_PAINT消息驱动的
#10
我同意vcbear和luxes的说法.老兄.不要老记着dos下的程序模式.
#11
这个程序就是在consle模式下模拟MFC工作原理的,没有重画窗口的动作的,程序是从侯哥站点下载的,你们应该都研究过的吧?
可是我把run的语句注释掉了,还是一样的问题,还是printf语句的东西先出来,不会是我的机器的毛病吧?
可是我把run的语句注释掉了,还是一样的问题,还是printf语句的东西先出来,不会是我的机器的毛病吧?
#12
为什么呀为什么????????????
#13
因为你看错了
#14
?????????????????????????????
#15
75115关注!
#16
28812关注!
#1
猴哥的书我没看过,所以具体怎么回事也不清楚。你试着跟踪到InitInstance中看一下
#2
这说明前两个函数都不是阻塞的,这样printf才会在它们调用输出之前执行到。
#3
to luxes:
什么意思? 不懂! 什么是阻塞的? 到底怎么回事情?
什么意思? 不懂! 什么是阻塞的? 到底怎么回事情?
#4
为什么还没有人回答我的问题? 这个问题很复杂吗?
#5
printf("test\n");
pApp->Run();
把这两条语句对调一下;看看先,
不行就想想
pApp->InitApplication();
pApp->InitInstance();
这两条里面用的什么写的?
也改成printf();
再不行你把你的机器杂烂,一定可以搞定!(电脑说:别打了,别打了,我招……我招就是了……)
pApp->Run();
把这两条语句对调一下;看看先,
不行就想想
pApp->InitApplication();
pApp->InitInstance();
这两条里面用的什么写的?
也改成printf();
再不行你把你的机器杂烂,一定可以搞定!(电脑说:别打了,别打了,我招……我招就是了……)
#6
to AntGhazi:
我对调了呀,我不是说过了吗,我把"printf("test")放在哪儿都一样,都是这个结果!!
InitApplication()里面有 .TextOut(" dfasdf")等语句的
我对调了呀,我不是说过了吗,我把"printf("test")放在哪儿都一样,都是这个结果!!
InitApplication()里面有 .TextOut(" dfasdf")等语句的
#7
就是说,你的程序启动线程以后(pApp->InitApplication();pApp->InitInstance();),main里的代码还在网下走,先走到printf.而这时线程里的代码printf还没有执行到。
你加个Sleep(200)在Main里的Printf前看看效果吧
你加个Sleep(200)在Main里的Printf前看看效果吧
#8
在你调CWinApp::Run前,你的程序还没有建立消息循环,所以不能处理消息,你用TextOut写 的东西都要等到窗口重画时才显示出来!
#9
窗口重画是由WM_PAINT消息驱动的
#10
我同意vcbear和luxes的说法.老兄.不要老记着dos下的程序模式.
#11
这个程序就是在consle模式下模拟MFC工作原理的,没有重画窗口的动作的,程序是从侯哥站点下载的,你们应该都研究过的吧?
可是我把run的语句注释掉了,还是一样的问题,还是printf语句的东西先出来,不会是我的机器的毛病吧?
可是我把run的语句注释掉了,还是一样的问题,还是printf语句的东西先出来,不会是我的机器的毛病吧?
#12
为什么呀为什么????????????
#13
因为你看错了
#14
?????????????????????????????
#15
75115关注!
#16
28812关注!