上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 17 下一页

2012年12月26日

外排序

摘要: 外排序(External sorting)是指能够处理极大量数据的排序算法。通常来说,外排序处理的数据不能一次装入内存,只能放在读写较慢的外存储器(通常是硬盘)上。外排序通常采用的是一种“排序-归并”的策略。在排序阶段,先读入能放在内存中的数据量,将其排序输出到一个临时文件,依此进行,将待排序数据组织为多个有序的临时文件。然后在归并阶段将这些临时文件组合为一个大的有序文件,也即排序结果。外排序的一个例子是外归并排序(External merge sort),它读入一些能放在内存内的数据量,在内存中排序后输出为一个顺串(即是内部数据有序的临时文件),处理完所有的数据后再进行归并。比如,要对 90 阅读全文

posted @ 2012-12-26 16:13 zhuyf87 阅读(293) 评论(0) 推荐(0) 编辑

socket connect 函数设置超时

摘要: 使用Winsock connect函数,无法设置超时,而在连接一个不存在的主机时,将会阻塞至少要几十秒。其实在调用connect函数时,将socket设置为非阻塞,然后调用select函数,可以达到设置超时的效果。bool ConnectWithTimeout(SOCKET socket, char * host, int port, int timeout){ TIMEVAL timeval = {0}; timeval.tv_sec = timeout; timeval.tv_usec = 0; struct sockaddr_in address; ad... 阅读全文

posted @ 2012-12-26 12:39 zhuyf87 阅读(10136) 评论(0) 推荐(0) 编辑

2012年12月25日

获取线程结束代码(Exit Code)

摘要: 线程结束代码可以调用GetExitCodeThread()(并给予CreateThread所获得的线程handle作为参数)而得知:BOOL GetExitCodeThread( HANDLE hThread, LPDWORD lpExitCode);hThread:由CreateThread()传回的线程handlelpExitCode:指向一个DWORD,用于接收结束代码(exit code)如果成功传回TRUE,否则传回FALSE。如果失败,可以调用GetLastError()找出原因。如果线程已结束,那么线程的结束代码会被放在lpExitCode参数中带回来。如果线程尚未结束,lp.. 阅读全文

posted @ 2012-12-25 18:22 zhuyf87 阅读(8293) 评论(0) 推荐(0) 编辑

等待一个线程的结束

摘要: Win32 提供WaitForSingleObject()函数,其第一个参数是一个核心对象(如线程)的 handle。为方便讨论,把等待线程称为线程#1,把被等待线程称为线程#2。调用 WaitForSingleObject()并放置一个“线程句柄”作为参数,将使线程#1开始睡眠,直到线程#2结束。像Sleep()函数一样,WaitForSingleObject()也有一个参数用来指定最长的等待时间。DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds);hHandle:等待对象的 handle(代表一个核心... 阅读全文

posted @ 2012-12-25 18:09 zhuyf87 阅读(11826) 评论(0) 推荐(0) 编辑

Winsock IO模式

摘要: Winsock主要有三种IO操作模式:阻塞、非阻塞、重叠IO。默认情况下Winsock都是建立阻塞的socket,为了创建非阻塞socket,需要使用ioctlsocket的FIONBIO命令把socket设置为非阻塞。如果要使用重叠IO功能,需要在创建socket时指定重叠IO属性。1. 阻塞IO任何IO操作只有在完成后才能返回,阻塞函数在完成其指定的任务之前不允许程序执行另外的语句。阻塞IO编程简单,但不是最有效的编程方式。2. 非阻塞IO当执行一个IO操作时,如果此IO操作不会引起阻塞,函数将立即执行,并返回给调用者。如果此IO操作会引起阻塞,则函数返回错误码WSAEWOULDBLOCK 阅读全文

posted @ 2012-12-25 15:22 zhuyf87 阅读(627) 评论(0) 推荐(1) 编辑

2012年12月24日

c++捕获异常

摘要: catch子句(catch clause)中的异常说明符(exception specifier)决定了处理代码能够捕获的异常种类。1. 查找匹配的处理代码在查找匹配的catch期间,找到的是第一个可以处理该异常的catch。异常的类型与catch说明符的类型必须完全匹配,仅仅存在下面几种可能的区别。(1)非const对象的throw可以与指定接受const引用的catch匹配。(2)派生类对象的throw可以与指定其基类类型的catch匹配。(3)throw的数组会转换为指向其首元素的指针,函数会转换为函数指针。2. 异常说明符如果异常说明符不是引用,就将异常对象复制到catch形参中,ca 阅读全文

posted @ 2012-12-24 18:32 zhuyf87 阅读(1086) 评论(0) 推荐(0) 编辑

TCP连接connect等待时长控制的另一种方法

摘要: 原文地址:http://blog.csdn.net/slin000/article/details/3971644在TCP网络应用开发中,作为客户端的程序经常需要主动连接服务器,这时你就需要建立一个Socket,然后调用connect函数连接到服务器地址。正常情况下,这并没有什么问题,但当服务器主机不存在的时候,connect函数可能会等待一分多钟才能返回。如果在主线程中调用connect函数,就会产生长时间无法响应的状况。在现代的互联网硬件环境中,一分钟的等待有点太长了,我们需要缩短等待时间。在Linux环境下,可以用alarm调用定时唤醒正在等待的线程,使connect函数从等待中返回,但 阅读全文

posted @ 2012-12-24 13:17 zhuyf87 阅读(5488) 评论(0) 推荐(1) 编辑

2012年12月23日

抛出异常与栈展开(stack unwinding)

摘要: 抛出异常时,将暂停当前函数的执行,开始查找匹配的catch子句。首先检查throw本身是否在try块内部,如果是,检查与该try相关的catch子句,看是否可以处理该异常。如果不能处理,就退出当前函数,并且释放当前函数的内存并销毁局部对象,继续到上层的调用函数中查找,直到找到一个可以处理该异常的catch。这个过程称为栈展开(stack unwinding)。当处理该异常的catch结束之后,紧接着该catch之后的点继续执行。1. 为局部对象调用析构函数如上所述,在栈展开的过程中,会释放局部对象所占用的内存并运行类类型局部对象的析构函数。但需要注意的是,如果一个块通过new动态分配内存,并且 阅读全文

posted @ 2012-12-23 09:37 zhuyf87 阅读(7854) 评论(0) 推荐(4) 编辑

2012年12月20日

抛出类类型的异常

摘要: 异常抛出后,被选中的处理代码是调用链中与该对象类型匹配且离抛出异常位置最近的那个。如果抛出的异常对象是一个数组,将转换为指向数组首元素的指针;如果抛出的是一个函数,则转换为指向该函数的指针。抛出throw之后,跟在throw后面的语句不会继续执行。控制将从throw转移到匹配的catch。该catch可以是同一函数中局部的catch,也可以在直接或间接调用发生异常的函数的另一个函数中。因为在处理异常的时候会释放局部存储,所以被抛出的对象就不能再局部存储,而是用throw表达式初始化一个称为异常对象(exception object)的特殊对象。异常对象由编译器管理,而且保证驻留在可能被激活的任 阅读全文

posted @ 2012-12-20 17:54 zhuyf87 阅读(1316) 评论(0) 推荐(0) 编辑

散列表查找的性能分析

摘要: 散列表的查找过程基本上和造表过程相同。一些关键字可通过散列函数转换的地址直接找到,另一些关键字在散列函数得到的地址上产生了冲突,需要按处理冲突的方法进行查找。在处理冲突的方法中,产生冲突后的查找仍然是给定值与关键码进行比较的过程。所以,对散列表查找效率的量度,依然用平均查找长度来衡量。查找过程中,关键字的比较次数,取决于产生冲突的多少,产生的冲突少,查找效率就高,产生的冲突多,查找效率就低。因此,影响产生冲突多少的因素,也就是影响查找效率的因素。影响产生冲突多少有以下三个因素:1. 散列函数是否均匀;2. 处理冲突的方法;3. 散列表的装填因子。散列表的装填因子定义为:α = 填入表中的元素个 阅读全文

posted @ 2012-12-20 13:04 zhuyf87 阅读(797) 评论(0) 推荐(0) 编辑

上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 17 下一页

导航