GLib.ThreadPool
Vala で sを使用しようとしていますが、Google Code と既存のドキュメントを検索した後、それらの使用の良い例が見つかりません。私自身がそれらを使用しようとすると、未処理GLib.ThreadError
の s が発生します。
たとえば、整数範囲の乗算をスレッド化する次の 26 行を考えてみましょう。
threaded_multiply.vala
class Range {
public int low;
public int high;
public Range(int low, int high) {
this.low = low;
this.high = high;
}
}
void multiply_range(Range r) {
int product = 1;
for (int i=r.low; i<=r.high; i++)
product = product * i;
print("range(%s, %s) = %s\n",
r.low.to_string(), r.high.to_string(), product.to_string());
}
void main() {
ThreadPool<Range> threads;
threads = new ThreadPool<Range>((Func<Range>)multiply_range, 4, true);
for (int i=1; i<=10; i++)
threads.push(new Range(i, i+5));
}
それらをコンパイルすると正常にvalac --thread threaded_multipy.vala
動作します...しかし、警告が表示されます。マルチスレッドの危険性を考えると、これは私が何か間違ったことをしていると思わせ、最終的に私の顔に爆発するかもしれません.
誰をGLib.ThreadPool
正しく使うべきか知っている人はいますか?読んでいただきありがとうございます。回答があればさらに感謝します。
編集: コンパイル マシンのせいかもしれないと思ったのですが、いいえ、Thread.supported()
ここでは true と評価されます。