外层循环通过call调用子程序进入第二层循环,并将%%i作为参数,传递进去。内层循环通过%1使用第一个参数,也就是%%i。
2.既然有循环那么就有continue和break,continue结束本次迭代,进入到下次迭代中。break则是跳出本循环。
先讲break,它可以通过exit /b实现,例如我们每次都不要输出3,在等于3的时候就直接break掉。那么效果就应该是:
1 2 4
1 2 4 5
实际效果:
1 2 1 21 2完毕!
脚本如下:
@echo off
for /l %%i in (1,1,5) do call :printnum %%i
echo 完毕!
pause
:printnum
for /l %%j in (1,1,%1) do (
if %%j equ 3 exit /b
set /p=%%j<nul
echo,
goto :eof
分析:当i从3开始的时候,内存循环先输出12,当j==3的时候,执行exit /b退出了子程序。
所以最好是子程序全部是循环要做的事情
,否则exit /b之后的,子程序里循环外的东西都会跳过。上面例子中循环外的的echo,就被跳过了,所以后面输出都是连在一起了。下面链接中给出的讨论break的方法就是如此情形:http://bathome.net/thread-8739-1-1.html,其实这句exit /b跟goto :eof的效果是一样的,都是直接到文件末尾,并不是跳出循环。至于他们说goto :eof就类似于continue,我认为不是这样,它更像return。
关于contiue暂时没有解决办法(break也是诸多限制),以后有进展再补充。
补充
2016.7.18
当时写这篇文章的时候使用的操作系统是Windows Server 2008 R2,现在使用的是Win 10操作系统,发现可以在内层循环中直接使用外层循环变量了。那么例子1中的代码就可以像下面这样写:
@echo off
for /l %%i in (1,1,5) do (
for /l %%a in (1,1,%%i) do (
set /p=%%a<nul
echo.
pause
运行结果:
关于contiue其实可以反过来思考,之前是不合符条件的跳过,继续下次循环,现在是符合条件的运行,不符合的什么都不做,也就达到了continue的目的。例子2中的代码改写如下:
@echo off
for /l %%i in (1,1,5) do (
for /l %%a in (1,1,%%i) do (
if not %%a==3 (
set /p=%%a<nul
echo.
pause
运行结果:
一、概述 批处理中经常会需要嵌套的for循环,但其用法与c语言是有区别的。在c语言中我们可以很轻松的写出嵌套的for循环: int i; int j; for(i=0;i for(j=0;j do something; continue or break;很不幸的是,在批处理中外层循环的变量i是无法在内层循
一、for
循环
for 是最常见的
循环
:var members = ["张三", "李四", "王五"];
for(var i=0; i< members.length; i++){
console.log(members[i])
for
循环
最大的缺点是必须有计数器i和退出的条件,很多数据结构如果不是数组的情况下就无法使用。二、for...in
循环
var members = [...
rem 使用call调用子程序loop,exit /b相当于子程序return,可以带参数如:exit /b 0,则子程序返回0
call :mainLoop
pause&goto :eof
:mainLoop
for /l %%a in (1,1,10) do (
echo %%a
set /a r=%%a%%5
1.什么是批处理
1.1批处理(batch) 操作数据库,批处理指的是一次操作中执行多条SQL语句,批处理相比于一次一次执行效率会提高很多。当向数据库中添加大量的数据时,需要用到批处理。
举例: 送货员的工作:
未使用批处理的时候,送货员每次只能运送 一件货物给商家;
使用批处理,则是送货员将所有要运送的货物, 都用车带到发放处派给客户。
1.2 实现批处理
Statement和Prepa
cd\pressTest
del a.txt
for /l %%i in (1 1 10) do >>a.txt ab.exe -n 1000 -c 20 -t 60 -C "memberName=sunjm@cjtc.net.cn" http://shipmanagement.cjonline.net.cn/prelogin.do
pause
上面是
循环
10次,将每次的结果
在
循环嵌套
中,
continue
语句的作用是跳过当前内层
循环
的本次迭代,进入到下一次迭代。如果
continue
语句位于内层
循环
中,那么只有内层
循环
会被跳过;如果
continue
语句位于外层
循环
中,那么内层和外层
循环
都会被跳过,直接进行下一次外层
循环
迭代。
下面是一个示例代码,演示如何在嵌套的for
循环
中使用
continue
:
#include <stdio.h>
int main() {
int i, j;
// 外层
循环
遍历 0 到 4
for(i = 0; i < 5; i++) {
// 内层
循环
遍历 0 到 4
for(j = 0; j < 5; j++) {
// 如果 j 能够被 2 整除,则跳过本次内层
循环
迭代
if(j % 2 == 0) {
continue
;
printf("(%d, %d) ", i, j);
printf("\n");
return 0;
以上代码中,内层
循环
会在 j 能够被 2 整除时跳过本次迭代,因此输出结果为:
(0, 1) (0, 3)
(1, 1) (1, 3)
(2, 1) (2, 3)
(3, 1) (3, 3)
(4, 1) (4, 3)
> 不是。当线程执行异常时,会有补偿机制,创建新的线程替换。
3、如果线程池运行中动态设置了corePoolSize > 原始corePoolSize,现有线程数量小于新的corePoolSize,任务队列中还有任务,会自动创建线程吗?是怎么做的?
> 会。也是通过addWorker创建。
4、keepAliveTime是空闲线程超时时间,是有定时任务回收空闲线程吗?
> 没有。从任务队列获取任务时,有超时时间,就是这个keepAliveTime,超时没有获取到任务,会返回null,然后开始回收线程。
5、为什么获取任务时,workQueue.poll(keepAliveTime, TimeUnit.NANOSECONDS)写死了NANOSECONDS,明明创建线程的时候是可以指定时间单位的?
> 创建线程池的时候,通过unit.toNanos(keepAliveTime)转换好了时间单位。
C/C++ 中struct嵌套的内存分配
啥时候能不上班:
error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
2301_79464972:
线程池核心线程是如何保持住的?
lsqelql: