Windows多线程程序设计

  • 格式:doc
  • 大小:53.00 KB
  • 文档页数:9

下载文档原格式

  / 9
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Windows多线程程序设计- -

1、产生一个线程,只是个框架,没有具体实现。理解::CreateThread函数用法。

#include

DWORD WINAPI ThreadFunc(LPVOID);

int main()

{

HANDLE hThread;

DWORD dwThreadID;

hThread = ::CreateThread(NULL,

0,

(LPTHREAD_START_ROUTINE)(ThreadFunc),

NULL,

0,

&dwThreadID);

...;

return 0;

}

DWORD WINAPI ThreadFunc(LPVOID lParam)

{

...;

return 0;

}

2、一个真正运转的多线程程序,当你运行它的时候,你会发现(也可能会害怕),自己试试吧。说明了多线程程序是无法预测其行为的,每次运行都会有不同的结果。

#include

#include

using namespace std;

DWORD WINAPI ThreadFunc(LPVOID);

int main()

{

HANDLE hThread;

DWORD dwThreadID;

// 产生5个线程

for(int i=0; i<5; i++)

{

hThread = ::CreateThread(NULL,

0,

(LPTHREAD_START_ROUTINE)(ThreadFunc),

(LPVOID)&i,

0,

&dwThreadID);

if(dwThreadID)

cout << "Thread launched: " << i << endl;

}

// 必须等待线程结束,以后我们用更好的处理方法

Sleep(5000);

return 0;

}

DWORD WINAPI ThreadFunc(LPVOID lParam)

{

int n = (int)lParam;

for(int i=0; i<3; i++)

{

cout << n <<","<< n <<","<< n << ","< }

return 0;

}

3、使用CloseHandle函数来结束线程,应该是“来结束核心对象的”,详细要参见windows 多线程程序设计一书。

修改上面的程序,我们只简单的修改if语句。

if(dwThreadID)

{

cout << "Thread launched: " << i << endl;

CloseHandle(dwThreadID);

}

4、GetExitCodeThread函数的用法和用途,它传回的是线程函数的返回值,所以不能用GetExitCodeThread的返回值来判断线程是否结束。

#include

#include

using namespace std;

DWORD WINAPI ThreadFunc(LPVOID);

int main()

{

HANDLE hThread1;

HANDLE hThread2;

DWORD dwThreadID1;

DWORD dwThreadID2;

DWORD dwExitCode1 = 0;

DWORD dwExitCode2 = 0;

hThread1 = ::CreateThread(NULL,

0,

(LPTHREAD_START_ROUTINE)(ThreadFunc),

(LPVOID)1,

0,

&dwThreadID1);

if(dwThreadID1)

cout << "Thread launched: " << dwThreadID1 << endl;

hThread2 = ::CreateThread(NULL,

0,

(LPTHREAD_START_ROUTINE)(ThreadFunc),

(LPVOID)2,

0,

&dwThreadID2);

if(dwThreadID2)

cout << "Thread launched: " << dwThreadID2 << endl;

while(1)

{

cout<<"Press any key.";

cin.get();

GetExitCodeThread(hThread1, &dwExitCode1);

GetExitCodeThread(hThread2, &dwExitCode2);

if( dwExitCode1 == STILL_ACTIVE )

cout< if( dwExitCode2 == STILL_ACTIVE )

cout< if( dwExitCode1 != STILL_ACTIVE && dwExitCode2 != STILL_ACTIVE ) break;

}

CloseHandle(hThread1);

CloseHandle(hThread2);

相关主题