2013-09-09 3 views
0

Это мой код для многопоточной (Это не реальный код, но части разных файлов в одном месте, где я чувствую, что я делаю что-то неправильно)динамическое создание потоков в C++

//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"; 
    } 
}; 

Кодекс не дает любая ошибка, но она не подходит для запуска1. Пожалуйста, дайте мне знать, правильно ли я создаю нити. Если нет, то каков правильный путь.

+3

Вы протечки память. Не используйте 'new'. – chris

+3

Делает ли ваш 'основной' выход сразу после создания потоков, случайно? Если это так, программа завершается в этот момент, и потоки прерываются, прежде чем они смогут что-либо сделать. –

+1

Если ваша программа заканчивается нормально, возможно, вы не присоединяетесь к главному с потоком – hidrargyro

ответ

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); 
    } 
} 
+0

Большое спасибо. Интересно, почему я так и не понял этого раньше и потратил весь день на это. :) – sajal

Смежные вопросы