这是我的多线程代码(这不是实际的代码,而是在我认为我做错了的地方不同文件的部分)
//main function
Example ExampleObj;
for (int i=0;i<10;i++)
{
pthread_t *service_thread = new pthread_t;
pthread_create(service_thread, NULL,start,&ExampleObj);
}
//start function
void *start(void *a)
{
Example *h = reinterpret_cast<Example *>(a);
h->start1();
return 0;
}
class Example
{
public:
void start1()
{
std::cout <<"I am here \n";
}
};
代码没有给出任何错误,但它也没有出现在start1函数中。 如果我正确创建线程,请告诉我。 如果没有,那么正确的方法是什么。
答案 0 :(得分:1)
在工作线程完成之前,没有代码阻止main()
终止进程。
main()
应该类似于:
int main() {
Example ExampleObj;
// Start threads.
pthread_t threads[10];
for(size_t i = 0; i < sizeof threads / sizeof *threads; ++i) {
pthread_create(threads + i, NULL,start,&ExampleObj);
}
// Wait for the threads to terminate.
for(size_t i = 0; i < sizeof threads / sizeof *threads; ++i) {
pthread_join(threads[i], NULL);
}
}