当前位置: 首页 > 知识库问答 >
问题:

线程内的无限循环不工作[重复]

盛嘉
2023-03-14

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

}

共有1个答案

姬振
2023-03-14

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

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

    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
 类似资料:
  • 我已经写了这个生产者/消费者问题解决方案。它似乎在工作,而不是无限循环。我的印象是,pthread\u exit(NULL) 会让它停止,但老实说,我已经迷路了。有人能告诉我如何阻止循环的正确方向吗?

  • 我正在尝试编写一个线程,该线程将在我的主程序的后台运行,并监视某些内容。在某个时候,主程序应该向线程发出安全退出的信号。下面是一个以固定间隔将本地时间写入命令行的最小示例。 当“on”变量没有通过引用传递时,此代码会编译并产生预期的结果,只是线程永远不会终止。一旦变量通过引用传递,我就会收到编译器错误 您能建议一种修复此代码的方法吗? 额外的问题:哪里出了问题,为什么它可以与std::ref一起工

  • 问题内容: 由于某种原因,当我在路由中拥有动态属性并访问该页面时,我陷入了无限循环,该页面将不断请求自己。 我正在查看的路由是/ userlists /:id路由。该路由的控制器是- 当我访问/ userlists / 9时,我看到- 每3秒被记录一次,页面冻结。只要位置后面有一个斜杠(“ / userslists /”而不是“ / userlists”),就好像发生了这种情况。 有人知道原因吗?

  • hasNext()的定义是“如果此扫描仪的输入中有另一个标记,则返回true。此方法可能会在等待输入扫描时阻塞。扫描仪不会前进超过任何输入。” 当我把 standardInput.hasNext() 放在 for 循环中时,程序会向无穷大运行。但是如果我把它放在 while-loop 中,它不会运行到无穷大。这两个程序之间的区别在哪里,为什么其中一个有效而另一个无效? for循环: while-l

  • 我正在尝试构建一个worker verticle,通过采用kotlin的PubSub示例,结合这个关于worker无限阻塞循环处理的答案,将Google cloud PubSub主题订阅与vert.x的事件总线连接起来。 它确实有效,但Vert. X在收到来自PubSub的消息后的某个时间通过抛出异常来不断唠叨的日志(请暂时忽略阻止初始化): 这是源代码: 我显然错过了一些东西。此外,如果您有更好

  • 我正在看freeCodeCamp的一个关于flappy bird游戏的教程https://www.youtube.com/watch?v=pufko5eg8nc 但我正在使用一个类来学习更多关于它的知识。 问题是,图像没有加载到draw()函数的循环中。如果我将drawImage()放在循环之外(像其他图像一样),那么它们就可以工作。 控制台中没有错误,for循环中的两个图像没有出现,我只是不明白