【发布时间】:2017-11-27 12:10:06
【问题描述】:
我正在尝试使用 Emscripten 创建一个支持线程的简单程序:
#include <stdio.h>
#include <pthread.h>
void *myThreadFun(void *vargp) {
printf("From Thread \n");
return NULL;
}
int main(int argc, char *argv[]) {
pthread_t tid;
printf("Before Thread\n");
pthread_create(&tid, NULL, myThreadFun, NULL);
printf("Before join\n");
pthread_join(tid, NULL);
printf("After Thread\n");
return 0;
}
我在 Firefox 中执行它并使用 -s USE_PTHREADS=1 进行编译。
这是我在控制台中得到的输出:
Before Thread
Preallocating 1 workers for a pthread spawn pool.
Before join
但我期待:
Before Thread
Preallocating 1 workers for a pthread spawn pool.
Before join
After Thread
这就像线程没有结束。我错过了什么吗?
【问题讨论】:
-
奇怪的是,
Middle在您的代码中从未存在时被打印出来...... -
这是我运行上述代码后得到的输出,
Before Thread Before join From Thread After Thread不是你在代码中提到的。 -
您上面的代码应该打印为 1. 在线程之前 2. 从线程 3. 在加入之前 4. 在线程之后。如果它像这样打印它工作正常。但什么是 SDL.h?在加入之前和从线程可能会以不同的顺序打印,这也很好。
-
抱歉,我在从控制台粘贴结果时出错了。我编辑了这个问题。所以我得到了
Before Thread and Before join,但我没有得到After Thread。 @LethalProgrammer,我正在使用 Emscripten,你呢? -
在
return 0之前添加fflush(stdout);,它会自动工作。
标签: c multithreading emscripten