многопоточность — создание потока внутри экземпляров классов внутри метода main () и вызов Sleep ()

Поэтому я хотел создать поток, чтобы части моей программы могли работать независимо друг от друга. (Единственным другим способом было создание таймера на основе событий, и у меня нет на это времени).

Я могу создать поток в основном методе (точке входа) моего приложения, и он работает как задумано. То есть, когда я присоединяю свой поток к функции, расположенной в моем основном исходном файле. Эта функция будет вызываться в отдельном потоке, и поэтому я могу вызывать 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

Решение

Создание указателя на поток было первым шагом. Указатель был необходим, потому что переменная th вышла из области видимости. Присоединение к ветке как-то решило проблему. Избавление от этой линии решает проблему.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]