Visual C++ Threads简单示例

Tec*_*rry 6 c++ multithreading visual-c++ beginthread

我试图通过将函数传递给_beginthread来从main创建一个基本线程.但我的输出没有完成.

我得到以下输出:

Starting thread
48
Main ends
I
Run Code Online (Sandbox Code Playgroud)

有人可以澄清以下代码中的错误吗?

#include <iostream>
#include <process.h>
using namespace std;

void test(void *param)
{
    cout << "In thread function" << endl;
    Sleep(1000); // sleep for 1 second
    cout << "Thread function ends" << endl;
    _endthread();
}


int main()
{
    cout << "Starting thread" << endl;
    cout << _beginthread(test,0,NULL);
    cout << "Main ends" << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

kup*_*spb 10

因为从main返回将停止应用程序中的任何线程.你需要等待直到线程停止.全球变量最简单的解决方案 - 诚实的非常糟糕的例子.你需要在线程的句柄上使用wait函数.

#include <iostream>
#include <process.h>
using namespace std;

bool threadFinished = false;

void test(void *param)
{
    cout << "In thread function" << endl;
    Sleep(1000); // sleep for 1 second
    cout << "Thread function ends" << endl;
    threadFinished = true;
    _endthread();
}


int main()
{
    cout << "Starting thread" << endl;

    cout << _beginthread(test,0,NULL);
    while(!threadFinished)
    {
        Sleep(10);
    }
    cout << "Main ends" << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如何使用等待功能:

HANDLE hThread;
hThread = (HANDLE)_beginthread( test, 0, NULL);
WaitForSingleObject( hThread, INFINITE );
Run Code Online (Sandbox Code Playgroud)