首页 > 编程知识 正文

CreateThread(c语言多线程实例)

时间:2023-05-05 02:33:57 阅读:74654 作者:3601

标准运行时库函数。 必须包含头文件process.h。

线程uintptr_t_beginthread(void ) _ cdecl * start _ address (void * fun )、//线程执行函数、_ _ cdecl _ nsignedstaress NULL,默认安全属性unsigned stack_size,//线程堆栈大小,0,默认大小) 1M ) unsigned //线程执行函数,_ _ stdcall void * CREATE_SUSPENDED:挂起未指定* thrd addr//返回线程的ID; 1,_beginthread错误返回-1,_beginthreadex错误返回0。

2、两个API都可以创建线程,但_beginthreadex比_beginthread更安全。 MSDN解释说,在使用_beginthread创建线程时,如果线程执行函数立即终止,_beginthread可能会禁用线程句柄或返回另一个线程的句柄。 此外,由_beginthreadex创建的线程的初始状态可以是挂起的,从而更好地控制线程的状态。

用执行函数结束线程void_endthread(void );

void _ end thread ex (不一致恢复;

1、这两个API通过线程执行函数调用,立即退出线程。 如果在函数执行之外调用,线程不会终止。

2,_endthread和_endthreadex释放线程的资源,如线程本地存储(TLS )。 但是,_endthreadex不会释放线程句柄。 必须手动调用win32 API关闭手动释放。

3、当线程执行函数并返回时,将自动调用_endthread或_endthreadex。

当_endthread或_endthreadex导致的内存泄漏调用_endthread时,线程执行函数将终止。 但是,在函数运行时没有释放new的内存。 此外,不会对函数定义的类对象执行析构函数。 例如,如果有这样定义的类,则在构造函数中新建内存,然后在析构函数中释放。 很明显,内存泄漏。

代码示例

class my class { public : my class (} { cout ' my class enter ' endl; (}~MyClass () {cout 'MyClass exit' endl; }; voidfun1(void*param ) {MyClass mycl; _endthread (; //注释行代码和无注释,观察的输出结果}int main (() _beginthread ) fun 1,0,NULL ); getchar (; 返回0; } 输出

对于注释_endthread () :

MyClass enter

我的班级退出

如果不评论:

MyClass enter

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。