所以我想创建一个线程,让我的程序部分可以相互独立运行。 (唯一的另一种方法是创建一个基于事件的计时器,我没有时间)。
我可以在我的应用程序的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: %i\n", fileName.c_str(), alarmStep);
bRaiseAlarm = false;
}
}
}
在下面的代码中,只执行while(true)循环,并且由于Sleep()
,我的程序其余部分的功能暂停答案 0 :(得分:0)
创建指向线程的指针是第一步。指针是必需的,因为变量th超出了范围。加入线程以某种方式解决了问题。摆脱那条线解决了这个问题。