我正在构建一个 DialogFragment 用于显示用户可以应用的一些过滤器。这是我要构建的自定义视图的布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.constraint.Guideline
android:id="@+id/guideline_vertical_centered"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.5" />
<CheckBox
android:id="@+id/checkbox_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="4dp"
android:layout_marginStart="100dp"
android:layout_marginTop="16dp"
android:checked="true"
app:layout_constraintEnd_toStartOf="@+id/search_by_title"
app:layout_constraintHorizontal_chainStyle="spread_inside"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/search_by_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginTop="22dp"
android:text="Titolo"
app:layout_constraintStart_toEndOf="@+id/checkbox_title"
app:layout_constraintTop_toTopOf="parent" />
<CheckBox
android:id="@+id/checkbox_author"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:checked="true"
app:layout_constraintStart_toEndOf="@+id/guideline_vertical_centered"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginTop="22dp"
android:text="Autore"
app:layout_constraintStart_toEndOf="@+id/checkbox_author"
app:layout_constraintTop_toTopOf="parent" />
<CheckBox
android:id="@+id/checkbox_publisher"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="100dp"
android:checked="true"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/guideline7" />
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginTop="6dp"
android:text="Editore"
app:layout_constraintStart_toEndOf="@+id/checkbox_publisher"
app:layout_constraintTop_toTopOf="@+id/guideline7" /> …Run Code Online (Sandbox Code Playgroud) 我正在运行一个带有主线程和辅助线程的程序,并且在满足特定条件后,两者都应该退出。问题是辅助线程,在检查运行条件仍然有效后,使用 std::cin 等待用户输入,因此如果在调用 std::cin 后满足条件,则线程继续等待用户输入。代码是这样的:
MainThread()
{
std::thread t1{DoOtherWork}
...
while(condition)
{
DoWork();
}
t1.join();
}
DoOtherWork()
{
while(condition)
{
char c;
std::cin >> c;
ProcessInput(c);
}
return;
}
Run Code Online (Sandbox Code Playgroud)
因此,当不再满足条件时,两者都应该退出,但程序会卡在等待用户输入。如果我只是输入任何随机字符并按回车键,程序就会正常退出。
我的问题是,在加入辅助线程之前,主线程是否有任何方法可以将一些输入发送到 std::cin,以便另一个线程将继续执行并退出而无需任何进一步的用户输入。提前致谢
我写了这段代码:
std::pair<std::weak_ptr<Node>, size_t> NodeSelector::rouletteWheel() const {
const std::uniform_real_distribution<long double> urd;
size_t i = 0;
for(auto rnd = urd(shared_random_engine); rnd >= 0; ++i) {
rnd -= getNormValue(i);
}
return std::make_pair(entries_[i - 1], i - 1);
}
Run Code Online (Sandbox Code Playgroud)
以这种方式初始化“ shared_random_engine”的地方(在单独的.h文件中)
std::minstd_rand shared_random_engine(static_cast<unsigned int>(42));
Run Code Online (Sandbox Code Playgroud)
只要我在Windows上编译它,一切都可以正常工作,但是当我尝试使用g ++ 7.3.0在Ubuntu 18.04.2上编译时,出现此错误:
montecarlo.cpp: In member function ‘std::pair<std::weak_ptr<MonteCarloNode>, long unsigned int> NodeSelector::rouletteWheel() const’:
montecarlo.cpp:728:41: error: no match for call to ‘(const std::uniform_real_distribution<long double>) (std::minstd_rand&)’
for(auto rnd = urd(shared_random_engine); rnd >= 0; ++i) {
^
In file included from /usr/include/c++/7/random:49:0, …Run Code Online (Sandbox Code Playgroud) 我最近开始研究分配器和 c++17 中引入的新 pmr。
查看 cppreference 上 std::pmr::new_delete_resouce 的定义,我读到以下内容:
返回一个指向使用全局运算符new和运算符delete来分配内存的memory_resource的指针。
这个“全球”让我有点困惑。这是什么意思?它只是指操作员的正常调用吗?
int* i = new int;
delete i;
Run Code Online (Sandbox Code Playgroud)
因此在堆上分配东西,还是指分配全局变量的静态内存?
在这两种情况下使用这种结构有何意义?