标准运行时库函数。 必须包含头文件process.h。
线程uintptr_t_beginthreadvoid ) _ 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_endthreadvoid );
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; }; voidfun1void*param ) {MyClass mycl; _endthread ; //注释行代码和无注释,观察的输出结果}int main ) _beginthread ) fun 1,0,NULL ); getchar ; 返回0; } 输出
对于注释_endthread ) :
MyClass enter
我的班级退出
如果不评论:
MyClass enter
快三大小单双位技巧准确率99函数。 例如,如果有这样定义的类,则在构造函数中新建内存,然后在析构函数中释放。 很明显,内存泄漏。
代码示例
class my class { public : my class } { cout ‘ my class enter ‘ endl; }~MyClass ) {cout ‘MyClass exit’ endl; }; voidfun1void*param ) {MyClass mycl; _endthread ; //注释行代码和无注释,观察的输出结果}int main ) _beginthread ) fun 1,0,NULL ); getchar ; 返回0; } 输出
对于注释_endthread ) :
MyClass enter
我的班级退出
如果不评论:
MyClass enter