C++ - 在 main() 方法内的类实例中创建一个线程并调用 Sleep()
C++ - creating a thread within instances of classes inside the main() method and calling Sleep()
所以我想创建一个线程,以便能够让我的程序的某些部分彼此独立运行。(唯一的另一种方法是创建一个基于事件的计时器,我没有时间这样做)。
我可以在应用程序的 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 超出了范围。加入线程以某种方式解决了问题。摆脱这条线可以解决问题。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 试图在visual studio上用C++创建一个桌面应用程序
- 如何创建一个空的全局类并在启动时实例化它
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何创建一个QTableWidgetItem,用长文本右对齐,左边有省略号
- 我正在尝试使用 c++ 创建一个货币转换程序,我不知道如何继续
- visual是否可以在c++中创建一个接收无限数量相同类型(或至少相当数量)参数的函数
- 试图创建一个多线程程序来查找0-100000000之间的总素数
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 如何使用CLion在Mac上创建一个新的.txt文件
- 如何在没有数据拷贝的情况下从指针创建一个Eigen VectorXd对象
- 在c++中为double类型的数组创建一个unique_ptr
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- GLEW/GLUT:调用init并创建一个窗口后,取消初始化并重新初始化?
- 我想通过带有C++和Python的插件创建一个可扩展的应用程序
- 在 c++ 中,有一种方法可以创建一个包含地图作为值的树状地图?
- 模板化接口 - 创建一个泛型模板类以返回任何容器
- 创建一个包含 c++ 默认值的环境文件
- 如何创建一个类,以便向量工作 std::vector<MyClass<int>> v{ 1,2,3 };