C++多线程编程入门及范例详解
C语言中的多线程编程

C语言中的多线程编程多线程编程是指在一个程序中同时运行多个线程,这些线程可以并行执行不同的任务,以提高程序的效率和并发性。
在C语言中,可以使用标准的Thread库来实现多线程编程。
下面将介绍C语言中多线程编程的基本概念和用法。
首先,C语言中多线程编程的基本概念是线程。
线程是程序中的一条执行路径,每个线程都有自己的栈空间和寄存器等,可以独立执行不同的任务。
在C语言中,可以使用Thread库中的函数来创建线程、管理线程和同步线程之间的操作。
要在C语言中创建线程,首先需要包含Thread库的头文件,并定义一个函数作为线程的入口点。
然后使用Thread库中的函数创建线程并指定入口点函数,最后启动线程。
例如,下面是一个简单的C语言多线程编程示例:```#include <stdio.h>#include <stdlib.h>#include <pthread.h>void *print_message(void *ptr) {char *message = (char *)ptr;printf("%s\n", message);pthread_exit(NULL);}int main() {pthread_t thread;char *message = "Hello, this is a thread!";pthread_create(&thread, NULL, print_message, (void *)message);pthread_join(thread, NULL);return 0;}```在这个示例中,首先定义了一个print_message函数作为线程的入口点,然后在主函数中创建了一个线程,并指定入口点函数为print_message,最后等待线程执行完毕。
当程序执行时,会输出"Hello, this is a thread!",表示线程成功执行。
C语言多线程编程实例

linux下C语言多线程编程实例2007年11月29日星期四 10:39学东西,往往实例才是最让人感兴趣的,老是学基础理论,不动手,感觉没有成就感,呵呵。
下面先来一个实例。
我们通过创建两个线程来实现对一个数的递加。
或许这个实例没有实际运用的价值,但是稍微改动一下,我们就可以用到其他地方去拉。
下面是我们的代码:/*thread_example.c : c multiple thread programming in linux*author : falcon*E-mail : tunzhj03@*/#include <pthread.h>#include <stdio.h>#include <sys/time.h>#include <string.h>#define MAX 10pthread_t thread[2];pthread_mutex_t mut;int number=0, i;void *thread1(){printf ("thread1 : I'm thread 1\n");for (i = 0; i < MAX; i++){printf("thread1 : number = %d\n",number);pthread_mutex_lock(&mut);number++;pthread_mutex_unlock(&mut);sleep(2);}printf("thread1 :主函数在等我完成任务吗?\n");pthread_exit(NULL);}void *thread2(){printf("thread2 : I'm thread 2\n");for (i = 0; i < MAX; i++){printf("thread2 : number = %d\n",number);pthread_mutex_lock(&mut);number++;pthread_mutex_unlock(&mut);sleep(3);}printf("thread2 :主函数在等我完成任务吗?\n");pthread_exit(NULL);}void thread_create(void){int temp;memset(&thread, 0, sizeof(thread)); //comment1/*创建线程*/if((temp = pthread_create(&thread[0], NULL, thread1, NULL)) != 0)//comment2printf("线程1创建失败!\n");elseprintf("线程1被创建\n");if((temp = pthread_create(&thread[1], NULL, thread2, NULL)) != 0) //comment3 printf("线程2创建失败");elseprintf("线程2被创建\n");}void thread_wait(void){/*等待线程结束*/if(thread[0] !=0) { //comment4pthread_join(thread[0],NULL);printf("线程1已经结束\n");}if(thread[1] !=0) { //comment5pthread_join(thread[1],NULL);printf("线程2已经结束\n");}}int main(){/*用默认属性初始化互斥锁*/pthread_mutex_init(&mut,NULL);printf("我是主函数哦,我正在创建线程,呵呵\n");thread_create();printf("我是主函数哦,我正在等待线程完成任务阿,呵呵\n");thread_wait();return 0;}下面我们先来编译、执行一下引文:falcon@falcon:~/program/c/code/ftp$ gcc -lpthread -o thread_example thread_example.c falcon@falcon:~/program/c/code/ftp$ ./thread_example我是主函数哦,我正在创建线程,呵呵线程1被创建线程2被创建我是主函数哦,我正在等待线程完成任务阿,呵呵thread1 : I'm thread 1thread1 : number = 0thread2 : I'm thread 2thread2 : number = 1thread1 : number = 2thread2 : number = 3thread1 : number = 4thread2 : number = 5thread1 : number = 6thread1 : number = 7thread2 : number = 8thread1 : number = 9thread2 : number = 10thread1 :主函数在等我完成任务吗?线程1已经结束thread2 :主函数在等我完成任务吗?线程2已经结束实例代码里头的注释应该比较清楚了吧,下面我把网路上介绍上面涉及到的几个函数和变量给引用过来。
c编程中的多线程处理实例 中文

c编程中的多线程处理实例中文多线程是一种并发处理的方式,它可以充分利用多核处理器的优势,提高程序的执行效率。
在C编程中,多线程处理可以通过创建多个线程来同时执行不同的任务,从而实现并行处理。
假设我们有一个任务列表,需要对其中的任务进行处理。
如果采用单线程的方式,那么每次只能处理一个任务,效率较低。
而采用多线程处理的方式,则可以同时处理多个任务,提高处理速度。
在C语言中,可以使用pthread库来实现多线程处理。
首先,需要包含pthread.h头文件,并使用pthread_create函数来创建线程。
例如,可以创建两个线程来同时处理任务:```c#include <pthread.h>// 定义一个任务结构体typedef struct {int task_id;// 其他任务参数...} Task;// 线程处理函数void* process_task(void* arg) {Task* task = (Task*)arg;// 处理任务的代码...printf("正在处理任务%d\n", task->task_id);// 其他处理逻辑...pthread_exit(NULL);}int main() {// 创建两个任务Task task1, task2;task1.task_id = 1;task2.task_id = 2;// 创建两个线程pthread_t thread1, thread2;pthread_create(&thread1, NULL, process_task, (void*)&task1); pthread_create(&thread2, NULL, process_task, (void*)&task2);// 等待两个线程结束pthread_join(thread1, NULL);pthread_join(thread2, NULL);return 0;}```在上面的示例中,我们定义了一个任务结构体,并在主函数中创建了两个任务。
C语言多线程编程的基本原理和实战技巧

C语言多线程编程的基本原理和实战技巧随着计算机技术的不断发展,多线程编程在软件开发中变得越来越重要。
多线程编程可以提高程序的执行效率,充分利用多核处理器的优势,同时也能改善用户体验。
C语言作为一种广泛应用的编程语言,也提供了丰富的多线程编程接口和技巧。
一、多线程编程的基本原理多线程编程的基本原理是通过创建多个执行线程来同时执行不同的任务,从而提高程序的并发性和响应性。
在C语言中,我们可以使用pthread库来实现多线程编程。
下面是一个简单的示例代码:```c#include <stdio.h>#include <pthread.h>void* thread_function(void* arg) {printf("Hello from a thread!\n");pthread_exit(NULL);}int main() {pthread_t thread_id;int result = pthread_create(&thread_id, NULL, thread_function, NULL);if (result != 0) {perror("Thread creation failed");return 1;}printf("Hello from the main thread!\n");pthread_join(thread_id, NULL);return 0;}```在上面的代码中,我们创建了一个新的线程,并在该线程中执行thread_function函数。
主线程和新线程可以同时执行不同的任务,并且通过pthread_join函数等待新线程的结束。
二、多线程编程的实战技巧除了基本原理外,还有一些实战技巧可以帮助我们更好地进行多线程编程。
1. 线程同步在多线程编程中,线程之间的并发执行可能会导致数据竞争和不一致的结果。
C语言中的多线程编程技术解析

C语言中的多线程编程技术解析在C语言中,多线程编程技术是一种能够提高程序性能和效率的重要手段。
多线程编程使得程序能够同时执行多个任务,从而充分利用多核处理器的优势,加快程序的运行速度。
本文将从多线程的概念、实现方式以及常见应用场景进行解析,帮助读者深入了解C语言中的多线程编程技术。
首先,我们需要了解多线程的概念。
在C语言中,多线程是指在一个程序中可以同时执行多个程序段或函数,每个线程都有自己的执行路径。
与传统的单线程程序相比,多线程程序能够更好地同时处理多个任务,提高程序的并发性和响应速度。
在多线程编程中,通常会涉及线程的创建、启动、暂停、终止以及线程之间的通信等操作。
接着,我们需要了解多线程在C语言中的实现方式。
在C语言中,可以使用标准的POSIX线程库(pthread)来实现多线程编程。
使用pthread库,我们可以轻松创建、启动和管理多个线程。
具体来说,通过pthread_create函数可以创建一个新线程,通过pthread_join函数可以等待一个线程的结束,通过pthread_exit函数可以终止当前线程等。
此外,pthread库还提供了一系列的同步机制,如互斥锁(mutex)、条件变量(condition variable)等,帮助程序员更好地控制线程的并发访问。
在实际应用中,多线程编程技术通常用于处理需要并行处理的任务,比如网络编程、图像处理、数据分析等。
以网络编程为例,当一个服务器需要同时处理多个客户端的请求时,可以为每个客户端连接创建一个独立的线程,从而实现并发处理。
这样不仅提高了服务器的处理能力,也提高了系统的响应速度。
除了提高程序性能外,多线程编程还有助于代码模块化和复用。
通过将不同的功能模块放置在不同的线程中,可以更好地实现代码的分离和聚合,提高程序的可维护性和可扩展性。
此外,多线程编程还有助于充分利用多核处理器的优势,充分发挥硬件资源的性能。
总的来说,C语言中的多线程编程技术是一种重要的程序设计手段,能够提高程序的性能和效率,提高程序的并发性和响应速度。
c多线程编程实例

c多线程编程实例多线程编程,也称作并行编程,是指在一个程序中存在多个执行线程,这些线程可以同时执行,但它们之间有可能发生共享变量的竞争情况。
在这种情况下,程序员必须注意这些变量的使用,以确保程序在多线程环境下正常工作。
C语言是一门流行的程序设计语言,它具有良好的可移植性和易操作性,广泛应用于大多数复杂的应用程序开发中。
它的多线程编程能力也是其受欢迎的原因之一。
在C语言中,多线程编程是通过pthread库来实现的,它提供了一系列的函数,如pthread_create()、pthread_join()、pthread_exit()等,可以让程序员更轻松地实现多线程编程。
下面,我们就来看一个具体的多线程编程实例,如何在C语言中实现一个多线程程序。
首先,需要包含pthread库中所提供的头文件,以便调用多线程函数:#include <pthread.h>接下来,需要定义线程函数,在这个例子中,我们定义两个线程函数,分别用于处理输入和输出:void* thread_input(void* arg);void* thread_output(void* arg);接下来,需要实例化线程句柄,用于将线程号和线程函数关联起来:pthread_t thread_input_handler;pthread_t thread_output_handler;接着,需要创建线程,分别将线程句柄和线程函数关联:pthread_create(&thread_input_handler, NULL, thread_input, NULL);pthread_create(&thread_output_handler, NULL,thread_output, NULL);最后,需要在主线程中等待子线程完成工作,然后再进行清理: pthread_join(thread_input_handler, NULL);pthread_join(thread_output_handler,NULL);pthread_exit(NULL);以上就是一个基本的多线程编程实例,它可以用于大多数多线程应用场景。
linux下的CC++多进程多线程编程实例详解

linux下的CC++多进程多线程编程实例详解linux下的C\C++多进程多线程编程实例详解1、多进程编程#include <stdlib.h>#include <sys/types.h>#include <unistd.h>int main(){pid_t child_pid;/* 创建⼀个⼦进程 */child_pid = fork();if(child_pid == 0){printf("child pid\n");exit(0);}else{printf("father pid\n");sleep(60);}return 0;}2、多线程编程#include <stdio.h>#include <pthread.h>struct char_print_params{char character;int count;};void *char_print(void *parameters){struct char_print_params *p = (struct char_print_params *)parameters;int i;for(i = 0; i < p->count; i++){fputc(p->character,stderr);}return NULL;}int main(){pthread_t thread1_id;pthread_t thread2_id;struct char_print_params thread1_args;struct char_print_params thread2_args;thread1_args.character = 'x';thread1_args.count = 3000;pthread_create(&thread1_id, NULL, &char_print, &thread1_args);thread2_args.character = 'o';thread2_args.count = 2000;pthread_create(&thread2_id, NULL, &char_print, &thread2_args);pthread_join(thread1_id, NULL);pthread_join(thread2_id, NULL);return 0;}3、线程同步与互斥1)、互斥pthread_mutex_t mutex;pthread_mutex_init(&mutex, NULL);/*也可以⽤下⾯的⽅式初始化*/pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_lock(&mutex);/* 互斥 */thread_flag = value;pthread_mutex_unlock(&mutex);2)、条件变量int thread_flag = 0;pthread_mutex_t mutex;pthread_cond_t thread_flag_cv;\void init_flag(){pthread_mutex_init(&mutex, NULL);pthread_cond_init(&thread_flag_cv, NULL);thread_flag = 0;}void *thread_function(void *thread_flag){while(1){pthread_mutex_lock(&mutex);while(thread_flag != 0 ){pthread_cond_wait(&thread_flag_cv, &mutex);}pthread_mutex_unlock(&mutex);do_work();}return NULL;}void set_thread_flag(int flag_value){pthread_mutex_lock(&mutex);thread_flag = flag_value;pthread_cond_signal(&thread_flag_cv);pthread_mutex_unlock(&mutex);}感谢阅读,希望能帮助到⼤家,谢谢⼤家对本站的⽀持!。
c语言多线程编程实例

c语言多线程编程实例C语言多线程编程实例多线程编程是一种并发编程的方式,它可以让程序同时执行多个任务,提高程序的效率和响应速度。
C语言是一种广泛使用的编程语言,也支持多线程编程。
本文将介绍一些C语言多线程编程的实例,帮助读者更好地理解和掌握多线程编程技术。
1. 创建线程在C语言中,可以使用pthread库来创建线程。
下面是一个简单的例子,创建一个线程并让它输出一段文字:```#include <stdio.h>#include <pthread.h>void* thread_func(void* arg){printf("Hello, world!\n");return NULL;}int main(){pthread_t tid;pthread_create(&tid, NULL, thread_func, NULL);pthread_join(tid, NULL);return 0;}```在上面的代码中,我们定义了一个函数thread_func,它将作为线程的入口函数。
在main函数中,我们使用pthread_create函数创建了一个线程,并将thread_func作为入口函数。
然后使用pthread_join 函数等待线程结束。
2. 线程同步在多线程编程中,线程之间的同步非常重要。
下面是一个例子,演示如何使用互斥锁来保护共享资源:```#include <stdio.h>#include <pthread.h>int count = 0;pthread_mutex_t mutex;void* thread_func(void* arg){pthread_mutex_lock(&mutex);count++;printf("Thread %d: count = %d\n", (int)arg, count); pthread_mutex_unlock(&mutex);return NULL;}int main(){pthread_t tid1, tid2;pthread_mutex_init(&mutex, NULL);pthread_create(&tid1, NULL, thread_func, (void*)1); pthread_create(&tid2, NULL, thread_func, (void*)2); pthread_join(tid1, NULL);pthread_join(tid2, NULL);pthread_mutex_destroy(&mutex);return 0;}```在上面的代码中,我们定义了一个全局变量count,它将被两个线程同时访问。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
多线程编程之一——问题提出一、问题的提出编写一个耗时的单线程程序:新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG 添加一个按钮,ID为IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数,代码如下:1.void CSingleThreadDlg::OnSleepSixSecond()2.{3.Sleep(6000);//延时6秒4.}编译并运行应用程序,单击“延时6秒”按钮,你就会发现在这6秒期间程序就象“死机”一样,不在响应其它消息。
为了更好地处理这种耗时的操作,我们有必要学习——多线程编程。
二、多线程概述进程和线程都是操作系统的概念。
进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成,进程在运行过程中创建的资源随着进程的终止而被销毁,所使用的系统资源在进程终止时被释放或关闭。
线程是进程内部的一个执行单元。
系统创建好进程后,实际上就启动执行了该进程的主执行线程,主执行线程以函数地址形式,比如说main或WinMain函数,将程序的启动点提供给Windows 系统。
主执行线程终止了,进程也就随之终止。
每一个进程至少有一个主执行线程,它无需由用户去主动创建,是由系统自动创建的。
用户根据需要在应用程序中创建其它线程,多个线程并发地运行于同一个进程中。
一个进程中的所有线程都在该进程的虚拟地址空间中,共同使用这些虚拟地址空间、全局变量和系统资源,所以线程间的通讯非常方便,多线程技术的应用也较为广泛。
多线程可以实现并行处理,避免了某项任务长时间占用CPU时间。
要说明的一点是,目前大多数的计算机都是单处理器(CPU)的,为了运行所有这些线程,操作系统为每个独立线程安排一些CPU时间,操作系统以轮换方式向线程提供时间片,这就给人一种假象,好象这些线程都在同时运行。
由此可见,如果两个非常活跃的线程为了抢夺对CPU的控制权,在线程切换时会消耗很多的CPU资源,反而会降低系统的性能。
这一点在多线程编程时应该注意。
Win32SDK函数支持进行多线程的程序设计,并提供了操作系统原理中的各种同步、互斥和临界区等操作。
Visual C++6.0中,使用MFC类库也实现了多线程的程序设计,使得多线程编程更加方便。
三、Win32API对多线程编程的支持Win32提供了一系列的API函数来完成线程的创建、挂起、恢复、终结以及通信等工作。
下面将选取其中的一些重要函数进行说明。
1.HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,2.DWORD dwStackSize,3.LPTHREAD_START_ROUTINE lpStartAddress,4.LPVOID lpParameter,5.DWORD dwCreationFlags,6.LPDWORD lpThreadId);该函数在其调用进程的进程空间里创建一个新的线程,并返回已建线程的句柄,其中各参数说明如下:lpThreadAttributes:指向一个SECURITY_ATTRIBUTES结构的指针,该结构决定了线程的安全属性,一般置为NULL;dwStackSize:指定了线程的堆栈深度,一般都设置为0;lpStartAddress:表示新线程开始执行时代码所在函数的地址,即线程的起始地址。
一般情况为(LPTHREAD_START_ROUTINE)ThreadFunc,ThreadFunc是线程函数名;lpParameter:指定了线程执行时传送给线程的32位参数,即线程函数的参数;dwCreationFlags:控制线程创建的附加标志,可以取两种值。
如果该参数为0,线程在被创建后就会立即开始执行;如果该参数为CREATE_SUSPENDED,则系统产生线程后,该线程处于挂起状态,并不马上执行,直至函数ResumeThread被调用;lpThreadId:该参数返回所创建线程的ID;如果创建成功则返回线程的句柄,否则返回NULL。
1.DWORD SuspendThread(HANDLE hThread);该函数用于挂起指定的线程,如果函数执行成功,则线程的执行被终止。
1.DWORD ResumeThread(HANDLE hThread);该函数用于结束线程的挂起状态,执行线程。
1.VOID ExitThread(DWORD dwExitCode);该函数用于线程终结自身的执行,主要在线程的执行函数中被调用。
其中参数dwExitCode用来设置线程的退出码。
1.BOOL TerminateThread(HANDLE hThread,DWORD dwExitCode);一般情况下,线程运行结束之后,线程函数正常返回,但是应用程序可以调用TerminateThread 强行终止某一线程的执行。
各参数含义如下:hThread:将被终结的线程的句柄;dwExitCode:用于指定线程的退出码。
使用TerminateThread()终止某个线程的执行是不安全的,可能会引起系统不稳定;虽然该函数立即终止线程的执行,但并不释放线程所占用的资源。
因此,一般不建议使用该函数。
1BOOL PostThreadMessage(DWORD idThread,2.UINT Msg,3.WPARAM wParam,4.LPARAM lParam);该函数将一条消息放入到指定线程的消息队列中,并且不等到消息被该线程处理时便返回。
idThread:将接收消息的线程的ID;Msg:指定用来发送的消息;wParam:同消息有关的字参数;lParam:同消息有关的长参数;调用该函数时,如果即将接收消息的线程没有创建消息循环,则该函数执行失败。
四、Win32API多线程编程例程例程1MultiThread1建立一个基于对话框的工程MultiThread1,在对话框IDD_MULTITHREAD1_DIALOG中加入两个按钮和一个编辑框,两个按钮的ID分别是IDC_START,IDC_STOP,标题分别为“启动”,“停止”,IDC_STOP的属性选中Disabled;编辑框的ID为IDC_TIME,属性选中Read-only;在MultiThread1Dlg.h文件中添加线程函数声明:1.void ThreadFunc();注意,线程函数的声明应在类CMultiThread1Dlg的外部。
在类CMultiThread1Dlg内部添加protected型变量:1.HANDLE hThread;2.DWORD ThreadID;分别代表线程的句柄和ID。
在MultiThread1Dlg.cpp文件中添加全局变量m_bRun:1.volatile BOOL m_bRun;m_bRun代表线程是否正在运行。
你要留意到全局变量m_bRun是使用volatile修饰符的,volatile修饰符的作用是告诉编译器无需对该变量作任何的优化,即无需将它放到一个寄存器中,并且该值可被外部改变。
对于多线程引用的全局变量来说,volatile是一个非常重要的修饰符。
编写线程函数:1.void ThreadFunc()2.{3.CTime time;4.CString strTime;5.m_bRun=TRUE;6.while(m_bRun)7.{8.time=CTime::GetCurrentTime();9.strTime=time.Format("%H:%M:%S");10.::SetDlgItemText(AfxGetMainWnd()->m_hWnd,IDC_TIME,strTime);11.Sleep(1000);12.}13.}该线程函数没有参数,也不返回函数值。
只要m_bRun为TRUE,线程一直运行。
双击IDC_START按钮,完成该按钮的消息函数:1.void CMultiThread1Dlg::OnStart()2.{3.//TODO:Add your control notification handler code here4.hThread=CreateThread(NULL,5.0,6.(LPTHREAD_START_ROUTINE)ThreadFunc,7.NULL,8.0,9.&ThreadID);10.GetDlgItem(IDC_START)->EnableWindow(FALSE);11.GetDlgItem(IDC_STOP)->EnableWindow(TRUE);12.13.}双击IDC_STOP按钮,完成该按钮的消息函数:1.void CMultiThread1Dlg::OnStop()2.{3.//TODO:Add your control notification handler code here4.m_bRun=FALSE;5.GetDlgItem(IDC_START)->EnableWindow(TRUE);6.GetDlgItem(IDC_STOP)->EnableWindow(FALSE);7.}编译并运行该例程,体会使用Win32API编写的多线程。
例程2MultiThread2该线程演示了如何传送一个一个整型的参数到一个线程中,以及如何等待一个线程完成处理。
建立一个基于对话框的工程MultiThread2,在对话框IDD_MULTITHREAD2_DIALOG中加入一个编辑框和一个按钮,ID分别是IDC_COUNT,IDC_START,按钮控件的标题为“开始”;在MultiThread2Dlg.h文件中添加线程函数声明:1.void ThreadFunc(int integer);注意,线程函数的声明应在类CMultiThread2Dlg的外部。
在类CMultiThread2Dlg内部添加protected型变量:1.HANDLE hThread;2.DWORD ThreadID;分别代表线程的句柄和ID。
打开ClassWizard,为编辑框IDC_COUNT添加int型变量m_nCount。
在MultiThread2Dlg.cpp 文件中添加:1.void ThreadFunc(int integer)2.{3.int i;4.for(i=0;i<integer;i++)5.{6.Beep(200,50);7.Sleep(1000);8.}9.}双击IDC_START按钮,完成该按钮的消息函数:1.void CMultiThread2Dlg::OnStart()2.{3.UpdateData(TRUE);4.int integer=m_nCount;5.hThread=CreateThread(NULL,6.0,7.(LPTHREAD_START_ROUTINE)ThreadFunc,8.(VOID*)integer,9.0,10.&ThreadID);11.GetDlgItem(IDC_START)->EnableWindow(FALSE);12.WaitForSingleObject(hThread,INFINITE);13.GetDlgItem(IDC_START)->EnableWindow(TRUE);14.}顺便说一下WaitForSingleObject函数,其函数原型为:1.DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds);hHandle为要监视的对象(一般为同步对象,也可以是线程)的句柄;dwMilliseconds为hHandle对象所设置的超时值,单位为毫秒;当在某一线程中调用该函数时,线程暂时挂起,系统监视hHandle所指向的对象的状态。