многопоточность — пользовательский ввод / вывод в потоках переполнение стека

У меня есть некоторый код, который состоит из класса для окна (с использованием Nana C ++) и нескольких потоков для работы в сети. Тем не менее, я никак не могу вывести на экран пользователя. Я пытался добавить текстовое поле, использовать окно сообщения, распечатать на консоли, но оно не отображается. Это проблема с Nana или Boost.Thread?

Если это проблема с Boost.Thread, я могу переключиться на std :: thread, но я не думаю, что это сработает.

void thread()//Let's say this function is started on a thread and the window is started on main
{
append(L"append test");
MsgBox(L"msgbox test"):
}

1

Решение

есть демонстрация Nana, иллюстрирующая, как добавлять тексты в другой ветке.

#include <nana/gui.hpp>
#include <nana/gui/widgets/textbox.hpp>
#include <nana/gui/widgets/button.hpp>
#include <mutex>
#include <condition_variable>
#include <thread>

int main()
{
using namespace nana;

form fm(API::make_center(300, 250));

textbox txt(fm, rectangle(10, 10, 280, 190));
button btn(fm, rectangle(10, 220, 200, 20));
btn.caption("append texts in other thread");

std::mutex mutex;
std::condition_variable condvar;
volatile bool running = true;

std::thread thrd([&]
{
while(running)
{
std::unique_lock<std::mutex> lock(mutex);
condvar.wait(lock);

txt.append(L"append a new line\n", false);

msgbox mb(L"hello");
mb<<L"This is a demo";
mb.show();
}
});

btn.events().click([&]
{
std::lock_guard<std::mutex> lock(mutex);
condvar.notify_one();
});

fm.events().unload([&]
{
running = false;
std::lock_guard<std::mutex> lock(mutex);
condvar.notify_one();
});

fm.show();
exec();
thrd.join();
}

Это демо создано с помощью Nana C ++ Library 1.0.2 и отлично работает на Windows / Linux

2

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


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