私はstd::thread
を使用してC++にいくつかのスレッドを生成しようとしているが、私はそれを動作させることはできません。何か違いがあれば、私はVS 2015を使用しています。スレッド作成時に失敗します(t[thread_id] = std::thread(test);
)。これは私のコードの関連する部分である:例外::スレッド
void test() {}
void threaded_DFT(std::complex<double>* x, std::complex<double>* X, size_t N) {
std::complex<double>* tmp=(std::complex<double>*)malloc(N * sizeof *tmp);
std::thread* t=NULL;
size_t num_threads;
size_t stages = log2(N);
size_t FFT_8_stages = stages/3;
size_t remainder_stages = stages % 3;
size_t Ns = 1;
for (size_t i=0, Ns = 1; i < FFT_8_stages; i++,Ns=pow(2,3*i))
{
num_threads = N/8;
t = (std::thread*)malloc(num_threads * sizeof *t);
if (!t)
exit(EXIT_FAILURE);
for (size_t thread_id = 0; thread_id < num_threads; thread_id++) {
t[thread_id] = std::thread(test);
//t[thread_id] = std::thread(FFT_8, x, X, N, Ns, thread_id);
}
for (size_t thread_id = 0; thread_id < num_threads; thread_id++) {
t[i].join();
}
x = X;
X = tmp;
tmp = x;
}
free(t);
...}
そして、これはコールスタックです:私は気づくに失敗しています明らかに何かがある
ucrtbased.dll!00007ffd296a21c5() Unknown
ucrtbased.dll!00007ffd296a2363() Unknown
ucrtbased.dll!00007ffd296c388d() Unknown
ucrtbased.dll!00007ffd296c28f6() Unknown
SignalPlot.exe!std::thread::_Move_thread(std::thread & _Other) Line 111 C++
SignalPlot.exe!std::thread::operator=(std::thread && _Other) Line 68 C++
SignalPlot.exe!threaded_DFT(std::complex<double> * x, std::complex<double> * X, unsigned __int64 N) Line 224 C++
SignalPlot.exe!main(int argc, char * * argv) Line 322 C++
SignalPlot.exe!WinMain(HINSTANCE__ * __formal, HINSTANCE__ * __formal, char * __formal, int __formal) Line 113 C++
これはので、私は推測しているシンプルでなければなりません。あなたの代わりに任意の標準ライブラリクラスのための新しいのmalloc関数を使用している場合
'トン=(STD ::スレッド*)はmalloc(NUM_THREADS *はsizeof *トン);' - あなたがやったすべてのメモリを割り当てられている - あなたは、任意の 'のstd :: thread'オブジェクトを作成していません。 'malloc'の使用を中止してください。 – PaulMcKenzie
そして 'new'を使用しないでください。整数の指数で 'pow'を使用しないでください - (私は* 2,3)' 'Ns個= POW:'のstd :: vector'、あなたが知っている... – LogicStuff
別の問題があります。あなたが期待する答えを得る保証はありません。 (http://stackoverflow.com/questions/25678481/why-does-pown-2-return-24-when-n-5-with-my-compiler-and-os)用 – PaulMcKenzie