现在的位置: 首页 > 综合 > 正文

多线程在C、Win32和MFC下的使用方法

2013年08月22日 ⁄ 综合 ⁄ 共 1449字 ⁄ 字号 评论关闭

转自:http://www.vckbase.com/index.php/wv/1660

一.前言
线程是执行路径。一个进程至少要有一个线程,也可能包含多个线程。若进程关闭了,则在进程中所有的线程也自动被销毁。当我们在一个应用程序中创建一个线程时,实际上,它是第二个线程。在C或C++中,程序的入口函数是main或wmain(Unicode版本)。在windows的运用程序中,程序的入口点是WinMain或wWinMain。当程序启动时,操作系统创建第一个线程。因此,windows是一个多任务操作系统。

二.线程函数

线程函数跟普通函数一样,它带有一个long void的指针参数。我们可以传任何类型的数据给这个void类型的指针数据。一个简单的线程函数如下:

1.ThreadFunction(LPVOID  param)
2.{
3.//do 
something
4.……
5.……
6.//return 
value;
7.}

三.线程属性

线程的优先级控制进程中线程的优先级。线程属性如下:

● 最高:THREAD_PRIORITY_HIGHEST

● 高于标准:THREAD_PRIORITY_ABOVE_NORMAL

● 标准:THREAD_PRIORITY_NORMAL

● 低于标准:THREAD_PRIORITY_BELOW_NORMAL

● 空闲:THREAD_PRIORITY_IDEL

我们可以用CreateThread函数设置线程优先级。在Win32 API函数中,我们用GetThreadPriority 和 SetThreadPriority获取和设置线程优先级;或者我们也可以用CWinThread的函数,在代码中,我们可以自由的调用它。优先级函数返回一个BOOL类型的变量。

四.各个平台下的多线程

1.C运行时库的多线程

● _beginthread

● _beginthreadex

● _endthread

● _endthreadex

以上C运行时库的函数都包含在头文件process.h中。要确保在Microsoft Visual Studio的工程设置是multithreaded DLL。在C运行时库中,通常是用_beginthread和_beginthreadex函数来创建线程。但是,这些线程有些不同。_beginthreadex有一些附加的参数,比如安全性和线程地址。我们用_beginthread来创建线程的话,要用_endthread来结束线程。_endthread将自动关闭线程的句柄。但是,若我们用_endthreadex的话,要用Win32
API的函数CloseHandle来关闭线程句柄。C运行时库包含了线程本地存储区(TLS)。我们可以用API或特定的编译代码去使用线程本地存储区。TlsAlloc,TlsFree,TlsGetValue和TlsSetValue通常用来储存指定的线程数据。Microsoft建议,假如你用了C运行时库的_beginthread函数,你就不要使用像ExitThread或者CreateThread这样的Win32 API函数。因为,假如你那样使用的话,可能会导致死锁。_beginthread在创建线程的时候使用多个参数。我们的例子是基于一个简单控制台的程序。用户键入线程数目创建线程,然后我们执行每一个线程。

01.//
Secound Thread function
02.void ThreadProc(void *param);
03.//
First thread
04.int main()

抱歉!评论已关闭.