【问题标题】:Infinite loop inside a thread not working [duplicate]线程内的无限循环不起作用[重复]
【发布时间】:2020-06-20 17:22:09
【问题描述】:

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

}

【问题讨论】:

  • 您的程序退出,线程没有任何机会启动并继续工作。
  • 你确定它只“运行一次”吗?你用你的调试器确认了吗?还是您仅依赖该控制台输出?因为你还没有冲洗它你知道...
  • MSVC 什么?有很多版本。
  • @AsteroidsWithWings Microsoft (R) C/C++ 优化编译器版本 19.24.28316 for x86。
  • @user7860670 我的具体问题的答案未包含在您链接到的问题中。请重新考虑是否重复。

标签: c++ multithreading winapi


【解决方案1】:

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

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

    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

【讨论】:

    猜你喜欢
    • 2020-12-25
    • 2021-02-21
    • 2013-05-30
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多