首页 > 解决方案 > 线程内的无限循环不起作用

问题描述

正在阅读一些关于多线程的教程并编写了一些代码来创建一个无限线程。但是,无限循环似乎不起作用。循环内的打印例程只运行一次。找到下面的代码以供参考。无法理解我做错了什么。我正在使用 MSVC 编译器。

#include <Windows.h>
#include <iostream>


DWORD __stdcall ThreadProc(LPVOID lpParameter) {

    const char* StringToPrint = (const char*)lpParameter;

    //expected this block to run infinitely.
    while (1) {
        std::cout << StringToPrint << "\n";
        Sleep(1000);
    }

    return 0;
}


int main() {

    DWORD ThreadId = 0;
    const char *Param = "Inside Thread";
    LPVOID Param1 = (LPVOID)Param;


    HANDLE Threadhandle = CreateThread(0, 0, ThreadProc, Param1, 0, &ThreadId);
    std::cout << "Thread ID " << ThreadId << " started" << "\n";
    CloseHandle(Threadhandle);
    return 0;

}

标签: c++multithreadingwinapi

解决方案


该循环似乎只运行一次,因为您的程序在您启动线程后立即终止。

如果您希望线程永远运行,请在主函数中等待它完成:

    HANDLE Threadhandle = CreateThread(0, 0, ThreadProc, Param1, 0, &ThreadId);
    std::cout << "Thread ID " << ThreadId << " started" << "\n";
    WaitForSingleObject(Threadhandle, INFINITE);
    CloseHandle(Threadhandle);                    // it will never reach this

推荐阅读