_beginthread
时间: 2023-06-21 19:09:49 浏览: 195
`_beginthread` 是一个函数,用于创建一个新的线程,并且让这个线程开始运行指定的函数。它是在 Windows 平台上的 C/C++ 编程中使用的函数,位于 `process.h` 头文件中。
该函数的原型如下:
```c
unsigned int __stdcall _beginthread(void (*start_address)(void*), unsigned stack_size, void* arglist);
```
其中,`start_address` 参数是一个函数指针,指向了新线程开始运行时要调用的函数;`stack_size` 参数表示新线程的堆栈大小,一般设置为 0 表示使用默认值;`arglist` 参数是传递给新线程的参数,可以为 NULL。
`_beginthread` 函数创建一个新的线程,并且让这个线程开始运行指定的函数。在函数执行过程中,如果遇到 `_endthread` 函数,则会结束当前线程的执行。
相关问题
void Game::game() { _beginthread(Game::key_thread, 0, NULL); _beginthread(Game::timer_thread, 0, NULL); Sleep(10000000000000000000); }显示void(Game::*)(void*arg)类型的实参与_beginthread_proc_type类型的形参不兼容怎么修改
这个错误提示是因为 _beginthread 函数需要的参数类型是 _beginthread_proc_type,而 Game::key_thread 和 Game::timer_thread 是成员函数,需要通过指向成员函数的指针来调用。可以将成员函数改为静态成员函数来解决这个问题。以下是修改方案:
```
static void Game::key_thread(void* arg);
static void Game::timer_thread(void* arg);
void Game::timer_thread(void* arg) {
bool flag1 = false;
while (seconds >= 0)
{
int gewei, shiwei;
gewei = seconds % 10;
shiwei = seconds / 10;
putimage(1012, 600, &number[shiwei]);
putimage(1062, 600, &number[gewei]);
Sleep(1000);
seconds--;
if (flag == true)
{
flag1 = true;
break;//说明时间内走到了终点
}
if (shengmingzhi == 0)
{
break;
}
}
if (seconds < 0)
{
flag = false;
biaoji.time = true;
}
if (flag1 == false) endgame();
}
void Game::game() {
_beginthread(Game::key_thread, 0, NULL);
_beginthread(Game::timer_thread, 0, NULL);
Sleep(10000000000000000000);
}
```
将成员函数改为静态成员函数即可。
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` 函数来终止。
阅读全文