私は自分のアプリケーションをマルチスレッドにしたいと思っています。独立した2つの独立したスレッドを追加すると、ランタイムエラーメッセージが表示されます。私は解決策を見つけることができません。多分誰かが助けてくれるかもしれませんここでQt Guiアプリケーションで2つの独立した標準スレッド
は誤差画像https://postimg.org/image/aasqn2y7b/
threads.h
#include <thread>
#include <atomic>
#include <chrono>
#include <iostream>
class Threads
{
public:
Threads() : m_threadOne(), m_threadTwo(), m_stopper(false) { }
~Threads() {
m_stopper.exchange(true);
if (m_threadOne.joinable()) m_threadOne.join();
if (m_threadTwo.joinable()) m_threadTwo.join();
}
void startThreadOne() {
m_threadOne = std::thread([this]() {
while (true) {
if (m_stopper.load()) break;
std::cout << "Thread 1" << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
}
});
}
void startThreadTwo() {
m_threadOne = std::thread([this]() {
while (true) {
if (m_stopper.load()) break;
std::cout << "Thread 2" << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
}
});
}
private:
std::thread m_threadOne;
std::thread m_threadTwo;
std::atomic<bool> m_stopper;
};
mainwindow.h
#include "threads.h"
#include <QMainWindow>
#include "ui_mainwindow.h"
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0) : QMainWindow(parent), ui(new Ui::MainWindow), m_threads() {
ui->setupUi(this);
m_threads.startThreadOne();
m_threads.startThreadTwo();
}
~MainWindow() { delete ui; }
private:
Ui::MainWindow *ui;
Threads m_threads;
};
main.cppに
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
エラーメッセージへのリンクが壊れています。メッセージをテキストとして投稿してください。 –
私はsoultionではないと思いますが、あなたはmutexのない両方のスレッドでstd :: atomic m_stopperを共有しています。あなたのポストにコンソールログを入れてみてください –
uelordi
リンクが機能します。私はちょっと前にチェックした。 しかし、私はあなたにテキストを提供します: Microsoft Visual C++ランタイムライブラリ ランタイムエラー! –