CreateThread、Beginthread、_beginthread
时间: 2023-08-30 21:10:25 浏览: 116
这三个函数都是用来创建新线程的函数,但是它们有些许不同。
CreateThread 是Windows API提供的函数,用于创建一个新的线程。它具有很高的灵活性,可以通过参数指定线程的起始地址、堆栈大小、安全描述符、初始化标志、线程名称等等。但是,CreateThread的缺点是它不支持C/C++标准库的线程管理机制,因此对于需要使用C/C++标准库的应用程序来说,CreateThread不太方便。
Beginthread 和 _beginthread 是C/C++标准库提供的函数,它们也可以用于创建新线程。和CreateThread不同的是,Beginthread和_beginthread只需要指定线程的起始地址和堆栈大小这两个参数,其他参数都有默认值。此外,Beginthread和_beginthread还支持C/C++标准库的线程管理机制,可以使用标准库提供的函数来管理线程。
需要注意的是,Beginthread和_beginthread是不同的函数,它们的区别在于_beginthread支持C++异常处理机制,而Beginthread不支持。
相关问题
createthread _beginthread
`_beginthread` 和 `CreateThread` 都是用于创建线程的函数,但它们在使用上有一些区别。
`_beginthread` 是C/C++标准库中的函数,用于创建一个新的线程。它的原型如下:
```c++
uintptr_t _beginthread(void (__cdecl *start_address)(void*), unsigned stack_size, void* arglist);
```
其中,`start_address` 是线程函数的地址,`stack_size` 是线程堆栈的大小,`arglist` 是传递给线程函数的参数。`_beginthread` 函数会创建一个新的线程,并在该线程中执行指定的线程函数。
而 `CreateThread` 是Windows API中的函数,用于创建一个新的线程。它的原型如下:
```c++
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId
);
```
其中,`lpThreadAttributes` 是线程的安全属性,`dwStackSize` 是线程堆栈的大小,`lpStartAddress` 是线程函数的地址,`lpParameter` 是传递给线程函数的参数,`dwCreationFlags` 是线程创建的标志,`lpThreadId` 是用于接收新线程ID的指针。`CreateThread` 函数会创建一个新的线程,并在该线程中执行指定的线程函数。
两者的区别主要在于:
- `_beginthread` 是C/C++标准库中的函数,而 `CreateThread` 是Windows API中的函数。
- `_beginthread` 创建的线程会自动终止,而 `CreateThread` 创建的线程需要手动调用 `ExitThread` 函数来终止。
_beginthread函数
_beginthread函数是一个Windows API函数,用于创建一个新的线程,并将其运行在当前进程中。该函数的原型如下:
unsigned int _beginthread(void( *start_address )( void * ), unsigned int stack_size, void *arglist );
该函数需要传递三个参数:
1. start_address:指向新线程开始执行的函数的指针。
2. stack_size:新线程的堆栈大小,以字节为单位。
3. arglist:传递给新线程函数的参数列表。
该函数返回一个无符号整数,代表新线程的ID号。如果创建线程失败,则返回-1。
_beginthread函数是C语言库函数,它提供了一种简单的方法来创建新的线程。这个函数是一个轻量级的线程创建函数,适用于创建简单的线程,但是它没有提供像CreateThread函数这样的更多的功能和灵活性。
阅读全文