`
sailei1
  • 浏览: 127628 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

多线程调用VC

阅读更多
package sai;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class Data {
	
	private static final String path = Thread.currentThread()
			.getContextClassLoader().getResource("").getPath();
	 boolean flag=false;
	 Process proc;
	public synchronized void GenerateFile(String infile, String outfile) {
     
		String inpath = path.substring(1, path.indexOf("bin"))
				+ "AdvancedARMA/Release/";
		String outpath = path.substring(1, path.indexOf("bin")) + "T/";
		String outpath2 = path.substring(1, path.indexOf("bin")) + "Txt2/";
		File file = new File(outpath2+outfile);

		if (file.exists()) {
			try {
				wait();
			} catch (InterruptedException e) {
			}
		}
		notify();// 唤醒阻塞队列的某线程到就绪队列
		String exeFileName = inpath + "AdvancedARMA.exe";
		String para = outpath + infile + "   " + outpath2 + outfile + "  10";

		String cmd = exeFileName + " " + para;

		try {
			proc = Runtime.getRuntime().exec(cmd);

		} catch (IOException e) {
			// TODO Auto-generated catch block
			System.out.println("Error exec!");
		}

        finally{
        	if(proc==null){
			 proc.destroy();
			 
        	}
        	
       	
		}

		
	}

	private synchronized String getData(String filepath) {

		String inpath = path.substring(1, path.indexOf("bin")) + "Txt2/";
		String lastline = "";

		String fname = inpath + filepath;
		File file = new File(fname);
		if (!file.exists()) {
			try {
				wait();
			} catch (InterruptedException e) {
			}
		}
		
		notify();// 唤醒阻塞队列的某线程到就绪队列

		try {
			BufferedReader br = new BufferedReader(new InputStreamReader(
					new FileInputStream(fname)));
			String line;

			while ((line = br.readLine()) != null) {
				lastline = line;

			}
			br.close();
			//file.delete();//删除临时文件
		} catch (FileNotFoundException e) {
			
			System.out.println("文件正在创建中...");
		} catch (IOException e) {
			e.printStackTrace();
		}
		return lastline;
	}
    
	
	static class GenerateData extends Thread {

		private List<String> id, time, zhan;
		private boolean flag;
		private Data data;
		int xx = 0;

		public GenerateData(List<String> id, List<String> time,
				List<String> zhan, Data data) {
			this.id = id;
			this.time = time;
			this.zhan = zhan;
			this.data = data;
		}

		public void run() {
			
			for (int s = 0; s < id.size(); s++) {
				for (int z = 0; z < time.size(); z++) {
					for (int y = 0; y < zhan.size(); y++) {
						for (int i = 0; i < zhan.size(); i++) {
							
							if (y == i) {continue;}
								String in =id.get(s)+ "--" +time.get(z)
								+ "--" + zhan.get(y) + "--" + "--" + zhan.get(i)
								+ ".txt";
								String out = "temp--" + in;

								data.GenerateFile(in, out);
								xx++;
								System.out.println(xx + "\t" + out);
								System.gc();	
						}
					}
				}
			}
		}
	}

	static class GetData extends Thread {
		private List<String> id, time, zhan, data1, data2;
		private boolean flag;
		private Data data;
		private int xx = 0; // 上行
		private int yy = 0;// 下行

		public GetData(List<String> id, List<String> time, List<String> zhan,
				Data data) {
			this.id = id;
			this.time = time;
			this.zhan = zhan;
			this.data = data;
		}
        
		//上行
		public void  getsql(List<String> data1){
			
			List<String> nullList = new ArrayList<String>();
			List<String> datalist = new ArrayList<String>();
			int xx = 1;
			for (int y = 0; y < zhan.size(); y++) {
				String sql = "INSERT INTO T_ODKLTJSCB (BOARD_STATION,   ARRIVAL_STATION1,ARRIVAL_STATION2,ARRIVAL_STATION3, ARRIVAL_STATION4, ARRIVAL_STATION5,"+
	   " ARRIVAL_STATION6,ARRIVAL_STATION7,ARRIVAL_STATION8,ARRIVAL_STATION9,ARRIVAL_STATION10, ARRIVAL_STATION11,"+
	   " ARRIVAL_STATION12,ARRIVAL_STATION13,ARRIVAL_STATION14,ARRIVAL_STATION15,ARRIVAL_STATION16,ARRIVAL_STATION17,"+
		"ARRIVAL_STATION18,ARRIVAL_STATION19, ARRIVAL_STATION20,ARRIVAL_STATION21)VALUES( ";
				for (int i = 0; i < zhan.size(); i++) {
				
					if (y < i) {
						// 上行
						datalist.add("a");
					} else {
						nullList.add(null);
					}
					if (y == i) {
							for(int g=0;g<nullList.size();g++){
								sql=sql+nullList.get(g)+",";
							}
					}
				}
				for(int v=0;v<datalist.size();v++){
					sql=sql+datalist.get(v)+",";
				}
				sql= sql.substring(0,sql.length()-1);
				sql=sql+" );";
//				System.out.println("插入 sql:" +sql +"\t" + xx);
//				xx++;
				datalist.clear();
				nullList.clear();
			}
		}
		
		//下行
		public void  getsql2(List<String> data2){
			
			List<String> nullList = new ArrayList<String>();
			List<String> datalist = new ArrayList<String>();
			int xx = 1;
			for (int y = 0; y < zhan.size(); y++) {
				String sql = "INSERT INTO T_ODKLTJSCB (BOARD_STATION,   ARRIVAL_STATION1,ARRIVAL_STATION2,ARRIVAL_STATION3, ARRIVAL_STATION4, ARRIVAL_STATION5,"+
	   " ARRIVAL_STATION6,ARRIVAL_STATION7,ARRIVAL_STATION8,ARRIVAL_STATION9,ARRIVAL_STATION10, ARRIVAL_STATION11,"+
	   " ARRIVAL_STATION12,ARRIVAL_STATION13,ARRIVAL_STATION14,ARRIVAL_STATION15,ARRIVAL_STATION16,ARRIVAL_STATION17,"+
		"ARRIVAL_STATION18,ARRIVAL_STATION19, ARRIVAL_STATION20,ARRIVAL_STATION21)VALUES( ";
				for (int i = 0; i < zhan.size(); i++) {
					
					if (y > i) {
						// 下行
						datalist.add("a");
					} else{
					for(int c=0;c< zhan.size()-i;c++){
						nullList.add(null);
					}}
					if (y == i) {
						for(int v=0;v<datalist.size();v++){
							sql=sql+datalist.get(v)+",";
						}
							for(int g=0;g<nullList.size();g++){
								sql=sql+nullList.get(g)+",";
							}	
					}
				}
				sql= sql.substring(0,sql.length()-1);
				sql=sql+" );";
//				System.out.println("插入 sql:" +sql +"\t" + xx);
//				xx++;
				datalist.clear();
				nullList.clear();
			}
		}
	public void run() {
			for (int s = 0; s < id.size(); s++) {
				for (int z = 0; z < time.size(); z++) {
					for (int y = 0; y < zhan.size(); y++) {
						for (int i = 0; i < zhan.size(); i++) {

							String out = "temp--"+
								id.get(s)+ "--" +time.get(z)
								+ "--" + zhan.get(y) + "--" + "--" + zhan.get(i)
								+ ".txt";
							if (y < i) {
								// 上行
								String lastline = data.getData(out);
								//xx++;
								System.out.println("(上行)old:" + lastline
										+ "\t" + out);
								 lastline=lastline.substring(lastline.indexOf(",")+1,lastline.lastIndexOf(","));
								// 四舍五入
									lastline = String.valueOf(new BigDecimal(lastline).setScale(0,
											BigDecimal.ROUND_HALF_UP));
								System.out.println(lastline);
						    	  data1.add(lastline);
								 
							}
							if (y > i) {
								// 下行
								String lastline = data.getData(out);
								//yy++;
								System.out.println("(下行)old:" + lastline
										+ "\t" + out);
								 lastline=lastline.substring(lastline.indexOf(",")+1,lastline.lastIndexOf(","));
								// 四舍五入
									lastline = String.valueOf(new BigDecimal(lastline).setScale(0,
											BigDecimal.ROUND_HALF_UP));
									System.out.println(lastline);
						    	  data2.add(lastline);
							}
						}
					}
				}
			}
		}
	}
	
	static class GenerateTxt extends Thread {
		
		private List<String>  id,time,zhan;
		private String type,beginTime,endTime;
		public GenerateTxt(List<String> id,List<String> time,List<String> zhan,String type, String beginTime,  String endTime){
			this.beginTime=beginTime;
			this.endTime=endTime;
			this.id=id;
			this.time=time;
			this.zhan=zhan;
			this.type=type;
		}
		
		public void run() {
			String outpath = path.substring(1, path.indexOf("bin")) + "T/";	
			for(int a=0;a<id.size();a++){
			for(int t=0;t<time.size();t++){
				for (int y = 0; y < zhan.size(); y++) {
				for(int i=0;i<zhan.size();i++){
					  if(y==i){
						  //上行y<i //下行y>i									
						  continue;
					  }
					  String sql="select rownum id,  tjsj,bz from( select  substrb(tjrq,0,8),tjrq,tjsj,c.bz from t_odkltj a ,holiday_date1 c where a.KLTJ_ID="+id.get(a)+" and  c.dayy=substrb(tjrq,0,8) and a.sjlx="+type+" and a.board_station='"+zhan.get(y)+"' and " +
					  		"a.arrival_station='"+zhan.get(i)+"' AND a.tjrq like'%"+time.get(t)+"'and c.dayy between'"+beginTime+"'and '"+endTime+"' order by a.tjrq) ";
					
					  String out = outpath+id.get(a)+ "--" +time.get(t)
						+ "--" + zhan.get(y) + "--" + "--" + zhan.get(i)
						+ ".txt";
					  System.out.println(sql);
					// DBTest.query(sql,out);
					
				}
				}
				}
			}
			
		}
	}


	
public static void main(String args[]) {
		
		
		List<String> time=new ArrayList<String>();
		time.add("0500-0530");
		time.add("0530-0600");
		time.add("0600-0630");
		time.add("0630-0700");
		time.add("0700-0730");
		time.add("0730-0800");
		time.add("0800-0830");
		time.add("0830-0900");
		time.add("0900-0930");
		time.add("0930-1000");
		time.add("1000-1030");
		time.add("1030-1100");
		time.add("1100-1130");
		time.add("1130-1200");
		time.add("1200-1230");
		time.add("1230-1300");
		time.add("1300-1330");
		time.add("1330-1400");
		time.add("1400-1430");
		time.add("1430-1500");
		time.add("1500-1530");
		time.add("1530-1600");
		time.add("1600-1630");
		time.add("1630-1700");
		time.add("1700-1730");
		time.add("1730-1800");
		time.add("1800-1830");
		time.add("1830-1900");
		time.add("1900-1930");
		time.add("1930-2000");
		time.add("2000-2030");
		time.add("2030-2100");
		time.add("2100-2130");
		time.add("2130-2200");
		
		List<String> zhan=new ArrayList<String>();
		zhan.add("AOH");
		zhan.add("SHH");
		zhan.add("SXH");
		zhan.add("NEH");
		zhan.add("ASH");
		zhan.add("VQH");
		zhan.add("KNH");
		zhan.add("AIH");
		zhan.add("KAH");
		zhan.add("SZH");
		zhan.add("ITH");
		zhan.add("IFH");
		zhan.add("WXH");
		zhan.add("VCH");
		zhan.add("QYH");
		zhan.add("CZH");
		zhan.add("DYH");
		zhan.add("RUH");
		zhan.add("ZJH");
		zhan.add("BWH");
		zhan.add("XPH");
		zhan.add("NJH");
		
		List<String> kltjlx= new ArrayList<String>();  
		kltjlx.add("OD_半小时");
	
		
		List<String> TJZDZ= new ArrayList<String>();
		TJZDZ.add("南京-上海,");
		DBTest db= new DBTest();
		List<String> id = db.getid(kltjlx, TJZDZ);// kltjlx 客流统计类型   TJZDZ 统计字段值 
		String type="2";  // 半小时
		String beginTime="20110331"; //开始时间
		String endTime="20110406"; //结束时间
		
	//	long start = System.currentTimeMillis();
				
		Data data= new Data();
		
		Thread t1=new Thread(new GenerateData(id,time,zhan,data));
		Thread t2=new Thread(new GetData(id,time,zhan,data));
		Thread t3=new Thread(new GenerateTxt(id,time,zhan,type,beginTime,endTime));
		t3.run();
		if(!t3.isAlive()){
		t1.setPriority(Thread.MAX_PRIORITY);	
		t1.start();
		
		try {
			t2.sleep(1000*60);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		  t2.start();
		  try {
			t1.join();
			 t2.join();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}}
////		long end = System.currentTimeMillis();
//		System.out.println("程序启动时间: " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(start))+"\n程序结束时间: " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(end))+"\n程序读取时间: " + new SimpleDateFormat("mm:ss").format(new Date(end - start)));
		
	
}
}

分享到:
评论

相关推荐

    vc6.0下实现 多线程编程的实例

    在本文中,我们将深入探讨如何在Visual C++ 6.0(简称VC6.0)环境下进行多线程编程,并结合Socket通信实现一个简单的客户端-服务器应用。标题提及的"vc6.0下实现 多线程编程的实例"正是我们要讨论的核心内容,而描述...

    win32多线程vc6.0

    这个“win32多线程vc6.0”项目是利用VC6.0来构建和编译支持多线程功能的应用程序。在Windows API中,多线程技术允许程序同时执行多个任务,提升效率并实现并发处理。 **多线程基础知识** 1. **线程定义**:线程是...

    VC_thread.rar_C vc6.0 线程_VC6.0多线程_vc 多线程_vc6 线程

    在VC6.0环境下进行C++编程时,多线程技术是提高程序执行效率和并发性的重要手段。本文将深入探讨VC6.0中的线程创建、线程同步等相关知识点,帮助开发者理解并掌握如何在VC6.0下实现多线程编程。 一、线程创建 在VC...

    vc实现利用多线程制作模态对话框的进度条

    在VC++编程环境中,利用多线程来制作模态对话框中的进度条是一种常见的技术,尤其是在执行长时间操作时,为了保持用户界面的响应性并提供反馈。模态对话框是一种阻止用户与应用程序其他部分交互,直到该对话框被关闭...

    VC中多线程10个详细例程

    VC 中多线程编程详解 本文将详细介绍 VC 中多线程编程的十个详细例程,旨在帮助读者深入理解多线程编程的奥妙。 一、问题的提出 在编写一个耗时的单线程程序时,我们发现程序会出现“死机”的情况,即程序在执行...

    VC实现多线程socket通信

    "VC实现多线程socket通信"这个主题聚焦于如何在Microsoft Visual C++(VC)环境下利用多线程技术进行socket编程,以实现高效且并发的网络通信。 Socket是网络编程中的一个重要概念,它提供了一种进程间通信(IPC)...

    VC多线程通讯

    在VC++编程环境中,多线程通信是一个关键的议题,特别是在开发高性能、高并发的应用程序时。多线程技术能够让我们充分利用多核处理器的优势,同时处理多个任务,提高程序的执行效率。本篇将深入探讨VC++中实现多线程...

    VC多线程中控制界面控件的几种方法

    ### VC多线程中控制界面控件的几种方法 在VC++(Visual C++)开发环境中,特别是使用MFC(Microsoft Foundation Classes)框架时,处理多线程与GUI(图形用户界面)之间的交互是一个常见的需求。为了确保程序的稳定...

    VC6.0调用大漠插件的例子 多线程

    本案例涉及的是在古老的Visual C++ 6.0(简称VC6.0)集成开发环境中调用名为“大漠”的插件,并且重点讨论了如何在多线程环境下进行这种操作。大漠插件通常用于文本处理、图像分析、网络监控等多种用途,其强大的...

    VC6最简单的多线程实例

    **VC6最简单的多线程实例** 在计算机编程中,多线程是一种允许程序同时执行多个独立任务的技术。在Visual C++ 6.0(简称VC6)中,多线程编程是通过Windows API提供的函数来实现的。本实例将详细介绍如何在VC6中创建...

    vc多线程编程简单介绍vc多线程编程简单介绍vc多线程编程简单介绍

    在Windows平台上,Visual C++(简称VC)是微软公司提供的一种强大的C++开发工具,它支持多线程编程,使得开发者能够创建同时执行多个任务的应用程序。多线程编程是现代软件开发中的一个重要概念,特别是在处理大数据...

    VC多线程编程

    ### VC多线程编程知识点详解 #### 一、引言:多线程编程的重要性 在软件开发中,尤其是在图形用户界面(GUI)应用领域,如何有效地处理耗时操作成为了一个重要议题。耗时操作(如文件读写、网络请求、复杂计算等)...

    VC多线程实例

    本实例将深入探讨如何在Visual C++(简称VC)中创建和管理多线程。 首先,理解多线程的概念是至关重要的。线程是操作系统分配CPU时间的基本单元,一个进程可以包含一个或多个线程。在单线程程序中,所有操作按顺序...

    VB调用VC生成的

    总结起来,VB调用VC生成的DLL涉及到DLL导出、指针和数组的跨语言传递、错误处理以及VB与VC类型的映射等多个方面。理解这些知识点是实现VB与VC之间高效协作的关键。在实际开发中,还需要考虑兼容性、性能优化以及安全...

    vc socket tcp 多线程客户端--服务器结构的例子.visual c++

    本文将深入探讨基于Visual C++的TCP多线程客户端-服务器结构,并以"vc socket tcp 多线程客户端--服务器结构的例子"为例进行解析。这个例子包含了一个名为"RawSocketServerExample"的文件,很可能是实现此架构的源...

    vc6.0Multi-Thread.zip_vc6 线程_多线程暂停_线程暂停_线程间 通信

    在本文中,我们将深入探讨如何在Microsoft Visual C++ 6.0(简称VC6.0)环境下进行多线程编程,特别关注线程的创建、暂停、停止以及线程间的通信。多线程编程是软件开发中的一个重要概念,它允许程序同时执行多个...

    VC多线程串口编程

    标题:"VC多线程串口编程" 描述:"VC多线程串口编程.doc"文档深入探讨了在工业控制和嵌入式系统中广泛使用的串口通信,并将其与多线程编程相结合,展示如何在VC环境下实现高效、稳定的串口通信处理。 ### 重要知识...

    vc编程之多线程详解

    【多线程编程详解】 在计算机编程中,多线程是一种技术,允许程序在同一时间执行多个不同的任务。这种技术在VC++(Visual C++)编程环境中尤为重要,因为它可以提高程序的响应性和效率,特别是在处理耗时操作时。...

    Delphi 调用VC DLL

    本篇将深入探讨如何使用Delphi调用由VC(Visual C++)编写的DLL(动态链接库)文件,重点在于参数传递的过程。首先,理解DLL的基本概念是必要的。DLL是一种共享代码的机制,允许多个程序同时使用同一段代码,从而...

    一个VC多线程的例子

    总的来说,这个"VC多线程"示例将涵盖多线程的创建、同步、生命周期管理和异常处理等多个方面,对于理解和实践VC++中的多线程编程大有裨益。通过深入研究这些示例,开发者能够更好地掌握多线程技术,从而编写出更加...

Global site tag (gtag.js) - Google Analytics