OS_CreateThread返回值(ossystem的返回值)

http://www.itjxue.com  2023-02-17 10:17  来源:未知  点击次数: 

CreateThread()函数每个参数都是什么意思,线程问题帮我都解释一下好么!

HANDLE CreateThread(

LPSECURITY_ATTRIBUTES lpsa,

DWORD cbStack,

LPTHREAD_START_ROUTINE lpStartAddr,

LPVOID lpvThreadParam,

DWORD fdwCreate,

LPDWORD lpIDThread

);

lpsa:线程句柄的安全属性,比如子进程是否可以继承这个线程句柄,一般情况设置为NULL

cbStack:线程栈大小,一般取0表示默认大小

lpStartAddr:线程入口函数 typedef DWORD (__stdcall *LPTHREAD_START_ROUTINE) (

void* lpThreadParameter );在win32程序中默认的调用函数约定就是WINAPI ,__stdcall = WINAPI 。因此你可以声明你的入口函数为:

DWORD WINAPI ThreadProc( void* lpParamete) {//线程中你要做的事情}

lpvThreadParam:就是线程入口函数的参数,就是ThreadProc( void* lpParamete) 的参数

fdwCreate:控制线程创建的标志一般为0,表示线程立即启动。如果你想创建之后把线程挂起来可以传入CREATE_SUSPENDED ,传入这个参数你需要再适当的地方调用ResumeThread 启动线程

lpIDThread:是线程ID返回值,这个用来接收线程返回的ID

写了这么多我还是怕你不懂:

我举个例子吧,我不保证能运行成功,我也没去编译

DWORD WINAPI ThreadProc( void* lpParameter)

{

int *x = (int*)lpParameter;//获得参数的地址

MessageBox(NULL,TEXT("adf"),NULL,MB_OK);

}

DWORD dwThreadID;

int x = 0;

HANDLE hThread = CreateThread(0,0,ThreadProc,(void*)x,0,dwThreadID);

CloseHandle(hThread);

想学习好windows编程MSDN是必须了解的,你居然不知道什么是MSDN,MSDN就是帮助文档,你可以到百度搜一下并把它下载过来,这对你MFC、Windows API、C/C++等很有帮助的

createthread的线程如何等待线程结束

1. 线程函数返回

当线程函数返回时,该线程会被终止,始终应该采用该方式来结束线程的运行,因为这是确保所有线程资源被正确清除的唯一办法。如果线程按照该方式成功返回,则:

1)线程函数中创建的所有C++对象均能通过他们的析构函数正确的被撤销

2)操作系统将正确的释放线程运行栈所使用的内存

3)系统将线程的退出代码(在线程的内核对象中维护)设置为线程函数的返回值

4)系统将该线程内核对象的使用计数递减

2.ExitThread函数

可以调用该函数,强制终止线程的运行。该函数将导致操作系统清除该线程所使用的所有操作系统资源。但是,C++资源(如类对象)将不被撤销。该方法通常是windows用来撤销线程的函数。因此,最好采用方法1来退出线程,而不是通过调用该函数来返回。

3.TerminateThread函数

调用该函数也能终止线程的运行,但与ExitThread函数不同,后者总是撤销调用的线程,而前者能够撤销任何线程。TerminateThread是异步运行的函数,也就是说,它告诉系统你想要线程终止运行,但是,该函数返回时,不能保证线程被撤销。如果需要确切地知道该线程已经终止运行,必须调用WaitForSingleObject或类似函数。当使用方法1和方法2撤销线程时,该线程的内存栈空间也被撤销。而如果使用TerminateThread,那么在拥有该线程的进程终止运行之前,系统不撤销该线程的运行栈。

4.进程终止运行时终止线程

在进程终止运行时,该进程中的所有线程全部终止运行,由于整个进程已经被关闭,进程所使用的所有资源肯定已被清除。这当然包括所有线程的栈空间。使用ExitProcess和TerminateProcess函数,会导致进程中的剩余线程被强制撤销,就像从每个剩余的线程调用TerminataProcess一样,因此,这也意味着正确的应用程序清除没有发生,即C++对象析构函数没被调用,数据没有转移至磁盘等等。

如何取得createthread调用的线程函数的返回值

函数返回值表示线程成功或失败。

进程可以通过调用GetExitCodeThread函数获得用CreateThread函数创建的线程函数的返回值。

用CreateRemoteThread.函数创建的不可以。

这是MSDN上的,你要学会查这些东东。

(责任编辑:IT教学网)

更多

推荐linux服务器文章