win32多线程程序设计

标题是一本书名,写得挺有意思的,是今天早上同事带过来的,我借过来看了一会儿.

然后按照书里面前面几章的内容敲了一些代码,跑了几个例子看了一下.

创建线程的函数:

HANDLE CreateThread(

LPSECURITY_ATTRIBUTES lpThreadAttributes,

SIZE_T dwStackSize,

LPTHREAD_START_ROUTINE lpStartAddress,

LPVOID lpParameter,

DWORD dwCreationFlags,

LPDWORD lpThreadId );

lpThreadAttributes 描述施行于这一新线程的security属性.NULL表示使用缺省值.

dwStackSize 新线程拥有自己的堆栈,0表示使用缺省值:1MB

lpStartAddress 新线程将开始的地址.这是一个函数指针.

lpParameter 此值将被传送到上述所指定之新线程函数去,作为参数.

dwCreationFlags 允许你产生一个暂时挂起的线程,默认情况是立即开始执行.

lpThreadId 新线程的ID会被传回到这里,他是一个全局变量,可以独一无二地表示系统任一进程中的某个线程.

如果创建成功,传回一个handle,代表新进程,否则传回一个false

例子代码如下:

#define WIN32_LEAN_AND_MEAN
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <conio.h> DWORD WINAPI ThreadFunc(LPVOID); #define Test2 #ifdef Test1
int main()
{
HANDLE hThrd;
DWORD threadId;
int i;
for (i=;i<;i++)
{
hThrd = CreateThread(NULL,,ThreadFunc,(LPVOID)i,,&threadId);
if (hThrd)
{
printf("Thread launched %d\n",i);
CloseHandle(hThrd);
}
}
//Sleep(2000);
system("pause");
return EXIT_SUCCESS;
} DWORD WINAPI ThreadFunc(LPVOID n)
{
int i;
for (i=;i<;i++)
{
printf("*************%d\n",n);
}
return ;
}
#endif #ifdef Test2
int main()
{
HANDLE hThrd1;
HANDLE hThrd2;
DWORD exitCode1 = ;
DWORD exitCode2 = ;
DWORD threadId; hThrd1 = CreateThread(NULL,,ThreadFunc,(LPVOID),,&threadId);
if (hThrd1)
{
printf("Thread 1 launched\n");
} hThrd2 = CreateThread(NULL,,ThreadFunc,(LPVOID),,&threadId);
if (hThrd2)
{
printf("Thread 2 launched\n");
} for(;;)
{
printf("Press any key to exit..\n");
getch(); GetExitCodeProcess(hThrd1,&exitCode1);
GetExitCodeProcess(hThrd2,&exitCode2);
if (exitCode1 == STILL_ACTIVE)
{
puts("Thread 1 is still running!");
}
if (exitCode2 == STILL_ACTIVE)
{
puts("Thread 2 is still running!");
}
if (exitCode1 != STILL_ACTIVE && exitCode2 != STILL_ACTIVE)
{
break;
}
}
CloseHandle(hThrd1);
CloseHandle(hThrd2); printf("Thread 1 returnd %d\n",exitCode1);
printf("Thread 2 returnd %d\n",exitCode2); //system("pause");
return EXIT_SUCCESS;
} DWORD WINAPI ThreadFunc(LPVOID n)
{
Sleep((DWORD)n**);
return (DWORD)n*;
}
#endif

一些个人感想:同事是中南大学计算机06级的,之前一直在上海工作,已经工作6,7年了,我发现他的书真是多,隔三差五

就带一本计算机方面的书过来,而且都是一些我之前从来没有接触过的书,真是涨了见识,而且他为人非常和善,跟他交流过

几次,没有一点架子,很乐于跟你分享他的一些经验,跟高手待在一起就是好啊!

上一篇:第二十六课:jQuery对事件对象的修复


下一篇:有趣的 box-decoration-break