
命令行程序是这样的,主程序运行完毕return后就会关闭,要让窗口不关闭,就让主程序中断,比如在main方法最后加上 SystemConsoleReadKey(),让主程序中断,等待键盘输入,按任意键后,程序退出,窗口关闭。
可以,原因如下:
1、当程序执行到子程序时,它会暂停主程序的执行,将控制权转移到子程序中执行,直到子程序执行完毕或者遇到转移指令返回到主程序。
2、在子程序中,可以通过return指令将程序的控制权返回到主程序,从而实现从子程序回到主程序的功能。
在你主线调用子线程的地方用WaitForSingleObject(子线程Handle, INFINITE);//主程序会一直等待子线程结束
等子线程结束了以后,才会在主线程里往下执行。
WinExec是异步处理,所以不会等待程序返回而直接执行后面的代码。
可以调用WaitForsingleObject来同步等待进程结束,使用该函数会挂起调用此函数的进程,接受到信号量,立刻返回主线程。
以上实现方法:
WaitForsingleObject(Handle,INFINITE);
Handle这里要替换成你创建进程的句柄
因为进程结束后会返回个信号量以表示进程已结束,可以利用这个特性实现你所述的功能。
首先说Thread、ThreadPool
前台线程:主程序必须等待线程执行完毕后才可退出程序。Thread默认为前台线程,也可以设置为后台线程
后台线程:主程序执行完毕后就退出,不管线程是否执行完毕。ThreadPool默认为后台线程
线程消耗:开启一个新线程,线程不做任何 *** 作,都要消耗1M左右的内存
ThreadPool为线程池,其目的就是为了减少开启新线程的消耗(使用线程池中的空闲线程,不必再开启新线程),以及统一管理线程(线程池中的线程执行完毕后,回归到线程池中,等待新任务)
总结:ThreadPool性能会好于Thread,但是ThreadPool与Thread对线程的控制都不是很够,例如线程等待(线程执行一段时间无响应后,直接停止线程,释放资源,两者都没有直接的API,只能通过硬编码实现)。同时ThreadPool使用的是线程池全局队列,全局队列中的线程,依旧会存在竞争共享资源的情况,从而影响性能。
下面说Task
Task背后的实现,也是使用的是线程池线程。但是它的性能优于ThreadPool,因为它使用的不是线程池的全局队列,而是使用的是本地队列。是的线程之间竞争资源的情况减少。
Task提供了丰富的API,开发者可对Task进行多种管理,控制。
楼主理解错了。
首先肯定一点,一个正常的程序它是不断执行的。我们在写一个程序的时候往往会加上一个死循环while(1)防止程序出现循环发送的结果。特别是在有中断的程序中,我们希望程序进入中断的时候能保护现场,不对任何主函数中定义的变量进行初始化,当中断结束后能回到被中断的程序。故在主函数中加入while(1),这样主程序在中断结束后就会回到while(1)循环中,继续执行被打断的程序。如果不加,那程序将从头来过,这样就出现循环发送,导致程序上的错误。
一、语法不同
if:IF(logical_test,value_if_true,value_if_false)
while:while<条件>do<语句>
二、功能不同
if语句,if(),括号里的内容和while()里的内容都是判定句,判定为真则执行语句,假则不执行语句。
不同点就是if没有循环的性子,一旦执行过后就跳出语句,而while判定为真后执行它下面的语句,执行完后返回括号里继续判定,判定为真继续执行语句知道括号里判定为假为止。
三、意思不同
while是循环语句,在C语言中通常用while来表示循环,例如在main()函数中一般都用while(1)来让主程序循环执行。
while语句叫做循环语句。同样是判断条件是否成立。但是执行完毕后继续判断该条件,直到该条件不成立则转入下一条语句。
扩展资料:
for循环是编程语言中一种开界的循环语句,而循环语句由循环体及循环的终止条件两部分组成,for循环其在各种编程语言中的实现与表达有所出入,但基本为以C语言和pascal语言代表的两种形式。
程序解读:
开始i=0,i<10,执行for循环的内部语句,然后回到i++,i=2,i<10,执行for循环的内部语句,,直到i++后变成11,11<10,不成立,返回0,循环结束。
1、for循环中的变量可以是一个也可以是多个,不要局限于一个变量处理到底,那样有时会很单调,当程序适合把多个变量组成循环时,用多个for语句来表示就是有些浪费了!
2、for循环中语句可以为语句体,语句体外加大括号"{}"将参加循环的语句括起来。for循环的三个表达式都是逗号表达式,这样来说,其实每个分号表达式可以由几个逗号表达式构成,中间用",”隔开,最后以“;”结束。
3、for循环中的"单次表达式"、"条件表达式"和"循环体语句"都是选择项,即可以缺省成只剩下“;”的空语句,";"不能缺省的原因是编译格式如此,缺省了编译器不认识而会报错。
参考资料来源:百度百科-c语言
区别:
1、程序是否提前安排好:
中断服务程序
是随机的,而普通
子程序
是预先安排好的。
2、结束程序不同:中断服务子程序以RETI结束,而一般子程序以RET结束。
3、结束动作不同:中断服务子程序RETI除将断点d回PC动作外,还要清除对应的中断优先标志位,以便新的
中断请求
能被响应。一般子程序则无此项 *** 作。
扩展资料:
当CPU正在处理内部数据时,会发生外部紧急情况,需要CPU暂停当前工作以处理紧急情况。返
回到原来
的中断地址以恢复原来的工作的过程称为中断。
组件实现这个函数被调用
中断系统
,应用CPU中断调用的请求源
中断源
,单片机的中断系统通常允许多个中断源,当多个中断源请求中断CPU的同时,有一个
中断优先级
的问题。通常,根据中断源的优先级,给予处理最
紧急事件
的中断请求源优先级,即最先响应最高级别的中断请求。
中断处理:
(1)保护中断的进程现场。为了使进程在中断处理后准确地返回到断点,系统必须保存当前处理器的
程序状态字
PSW、
程序计数器
PC等的值。
(2)分析中断的原因,go执行相应的中断处理程序。当多个中断请求同时发生时,来自最高
优先级中断
源的中断请求被处理。
(3)恢复中断的进程站点,CPU
继续执行
原来中断的进程。
参考资料来源:
百度百科
-中断服务程序
以上就是关于C#编窗口程序能运行但窗口迅速又关闭怎么回事全部的内容,包括:C#编窗口程序能运行但窗口迅速又关闭怎么回事、能不能用转移指令从子程序回到主程序,为什么、delphi中主线程如何等以另一个线程执行完在执行等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)