关于WIN32控制台程序

奋斗小青年 2011-11-26 08:46:06
很奇怪的一个问题,我自己写了个控制台程序。有这2种情况
1.在调试状态下,程序MAIN函数都return了,但调出来的命令窗口始终都关不了。而且关机都关不了。
2.在CMD命令行中调用EXE程序后,命令行窗口也关闭不了。搞得也关不了机,非要强制关机。

望高手们指教下。 VS2008建的程序
...全文
497 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
奋斗小青年 2011-11-28
  • 打赏
  • 举报
回复
问题已自己解决。最终问题出现在,相应的摄像头对象指针没释放。哎,纠结啊。
bmowker 2011-11-28
  • 打赏
  • 举报
回复
有没有用到线程

[Quote=引用 13 楼 wanyuan19890515 的回复:]

因为在CMD调用不好跟踪源代码,我刚在程序中加了些打屏信息,发现循环已经出去了。已经执行到main函数的return这里来了。为啥都return了 窗口都还不关闭了。 技术牛人与经验丰富的朋友麻烦指点下啊,谢谢了
[/Quote]


--signature------------------------------------
www.lunwenwa.com
奋斗小青年 2011-11-28
  • 打赏
  • 举报
回复
不是多线程,自己顶一下,坐等朋友们帮分析下。
奋斗小青年 2011-11-26
  • 打赏
  • 举报
回复
我这个程序是摄像头是隔多长时间拍一次照的。主要是程序都跑到Main函数的return了。在调试情况窗口不会自动关闭,必须我shift+f5窗口才么。CMD命令行就悲剧了,没那个shift+f5 所以根本退不出。哎 蛋疼啊
奋斗小青年 2011-11-26
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 ziyue007 的回复:]
楼上分析的挺好,楼主这问题还真蛋疼,我写的win32控制台程序还没运到过这种问题呢,当然我的做法一般都是另起一个线程,然后再做完这个事情之后在退出这个线程,在main函数里加一个while(flag)循环,循环里会不停执行switch语句,case 看是否有输入‘q’,输入ql ,杀掉所有程序正在执行的程序,然后让flag=0,这样就退出程序了,没出现过不能退出的状况
楼主可以试试我的做法
[/Quote]
贴贴你的代码看看,学习下
奋斗小青年 2011-11-26
  • 打赏
  • 举报
回复
不是吧,还要起多线程啊?
ziyue007 2011-11-26
  • 打赏
  • 举报
回复
楼上分析的挺好,楼主这问题还真蛋疼,我写的win32控制台程序还没运到过这种问题呢,当然我的做法一般都是另起一个线程,然后再做完这个事情之后在退出这个线程,在main函数里加一个while(flag)循环,循环里会不停执行switch语句,case 看是否有输入‘q’,输入ql ,杀掉所有程序正在执行的程序,然后让flag=0,这样就退出程序了,没出现过不能退出的状况
楼主可以试试我的做法
奋斗小青年 2011-11-26
  • 打赏
  • 举报
回复
我知道后面加个括号 只是说明括号里面的是个整体,跟其他没关系。只是看起来别扭。
继续等待各位给我分析原因,小弟不胜感激啊
xingfeng2510 2011-11-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wanyuan19890515 的回复:]

发现别人程序有这样的写法
{C/C++ code

while(条件)
{
do
{
//程序要做的事
}
while(条件);
{
//一些处理逻辑
}
}

}
第二个while后还有个括号,这啥写法啊 昏迷
[/Quote]
这种写法很常见,{}表块作用域,前面的是do{ //...} while(条件);完整do...while语句
接下来的是{},当执行到'}'时该作用域结束,在其作用域中声明的所有局部变量将会析构
xingfeng2510 2011-11-26
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 xingfeng2510 的回复:]

引用 4 楼 wanyuan19890515 的回复:

发现别人程序有这样的写法
{C/C++ code

while(条件)
{
do
{
//程序要做的事
}
while(条件);
{
//一些处理逻辑
}
}

}
第二个while后还有个括号,这啥写法啊 昏迷

{
//一些处理逻辑

这一段是空闲处理程序,当do...while不……
[/Quote]
哦,不好意思,看错了,还以为是win32应用程序呢。如果这控制台程序,就不存在神马空闲处理啦
xingfeng2510 2011-11-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wanyuan19890515 的回复:]

发现别人程序有这样的写法
{C/C++ code

while(条件)
{
do
{
//程序要做的事
}
while(条件);
{
//一些处理逻辑
}
}

}
第二个while后还有个括号,这啥写法啊 昏迷
[/Quote]
{
//一些处理逻辑

这一段是空闲处理程序,当do...while不满足条件时,While(条件)循环体仍在循环执行,可以在{ // ...}
内做一些相对耗时的任务。
奋斗小青年 2011-11-26
  • 打赏
  • 举报
回复
这么设置是release的?我刚设了下,还是debug的 我的是VS2008
yisikaipu 2011-11-26
  • 打赏
  • 举报
回复
写个release版的空程序先看看,以排除代码和debug设置可能造成的问题

int main(){return 0};
奋斗小青年 2011-11-26
  • 打赏
  • 举报
回复
现在是循环已经出去了。已经main主函数都return了
无赖叫兽 2011-11-26
  • 打赏
  • 举报
回复
建议循环里面的while的条件放在括号后面,用逗号表达式表达,大括号去掉试试!
奋斗小青年 2011-11-26
  • 打赏
  • 举报
回复
因为在CMD调用不好跟踪源代码,我刚在程序中加了些打屏信息,发现循环已经出去了。已经执行到main函数的return这里来了。为啥都return了 窗口都还不关闭了。 技术牛人与经验丰富的朋友麻烦指点下啊,谢谢了
无赖叫兽 2011-11-26
  • 打赏
  • 举报
回复
循环里的while在小括号里不是只能加条件,要做的事不是放在do里面吗?
波杰克男 2011-11-26
  • 打赏
  • 举报
回复
我前几天也遇到了,也是在调试的情况下,只能关机解决问题,不知道什么原因,坐等高手指点
奋斗小青年 2011-11-26
  • 打赏
  • 举报
回复
我现在不知道是窗口关不了是循环引起的,还是程序设置引起的。我调试时,如果跑完,窗口就没了,如果半路shift+F5 窗口就关不了。
如果在CMD里,窗口是肯定关不了。
奋斗小青年 2011-11-26
  • 打赏
  • 举报
回复
我给大家分析他的代码。
bool flag = true;
int temp = 1;
首先第一个while(flag)
接着do
{
//一个变量自增
}
接着while(变量小于某个值);
{
//正在要做的事在这里。
//在这里我加了点代码,当temp大于3就让flag = false;并且break
}
加载更多回复(17)

64,691

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧