C++ - 在 main() 方法内的类实例中创建一个线程并调用 Sleep()

C++ - creating a thread within instances of classes inside the main() method and calling Sleep()

本文关键字:创建 一个 线程 Sleep 调用 main 方法 C++ 实例      更新时间:2023-10-16

所以我想创建一个线程,以便能够让我的程序的某些部分彼此独立运行。(唯一的另一种方法是创建一个基于事件的计时器,我没有时间这样做)。

我可以在应用程序的 main 方法(入口点)中创建一个线程,它按预期工作。也就是说,当我将线程附加到位于主源文件中的函数时。它将在单独的线程中调用该函数,因此我可以在该函数中调用 Sleep() 我的程序将继续在该线程之外执行代码。

#include "stdafx.h"
#include <thread>
#include <windows.h>
#include <iostream>
#include <thread>
void makeThread()
{
while (true)
{
Sleep(2000);
printf("thread print");
}
}  
int main()
{
std::thread th(&makeThread);
printf("normal print");
int x;
std::cin >> x;
}

此代码将在打印"线程打印"之前打印"正常打印"。但是当我尝试在我在 Main 类中实例化的类中创建线程时,情况并非如此。我注意到,如果线程不在主类内,它会迫使我加入线程,因此,我无法单独执行逻辑。如何在类中正确调用 sleep(),以便只有我创建的线程而不是主线程休眠?这是我在 main() 使用的类中创建的线程的代码。

Alarm::Alarm(int cID, int port, string fileName) : ClientObserver(cID, port, fileName)
{
std::thread th(&Alarm::runLoop, this);
th.join();
}
void Alarm::runLoop()
{
while(true)
{
bRaiseAlarm = true;
Sleep(3500);
if(bRaiseAlarm == true)
{
//Sound the alarm
alarmStep = alarmStep >= 3 ? 1 : alarmStep + 1;
printf("nALARM FOR %c with alarm number: %in", fileName.c_str(), alarmStep);
bRaiseAlarm = false;
}
}
}

在下面的代码中,只有 while(true) 循环执行,并且由于 Sleep() 而暂停了程序其余部分的功能

创建指向线程的指针是第一步。需要指针,因为变量 th 超出了范围。加入线程以某种方式解决了问题。摆脱这条线可以解决问题。

相关文章: