0

这是我的多线程代码(这不是实际代码,而是不同文件的一部分在我觉得我做错了什么的地方)

//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 函数中。请让我知道我是否正确创建了线程。如果不是,那么正确的方法是什么。

4

1 回答 1

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);
    }
}
于 2013-09-09T14:04:36.077 回答