У меня мало запросов относительно приведенного ниже снимка кода.
1) Что касается pthread_create (), предположим, что Thread_1 создает Thread_2. Насколько я понимаю Thread_1 может выйти без объединения, но все же Thread_2 продолжит работу. Где, как в примере ниже без join (), я не могу запустить поток, и я вижу исключения.
2) В нескольких примерах я вижу создание потока без объекта потока, как показано ниже. Но когда я делаю то же самое, код прекращается.
std::thread(&Task::executeThread, this);
I am compiling with below command.
g++ filename.cpp -std=c++11 -lpthread
Но все равно он завершается за исключением. Это правильный способ создания потока или есть какая-то другая версия C ++ (В моем проекте они уже компилируются, но не уверены в версии).
3) В нескольких примерах кода моего проекта я вижуниже способ создания темы. Но я не могу выполнить приведенный ниже пример.
std::thread( std::bind(&Task::executeThread, this) );
Ниже приведен мой снимок кода.
#include <iostream>
#include <thread>
class Task
{
public:
void executeThread(void)
{
for(int i = 0; i < 5; i++)
{
std::cout << " :: " << i << std::endl;
}
}
void startThread(void);
};
void Task::startThread(void)
{
std::cout << "\nthis: " << this << std::endl;
#if 1
std::thread th(&Task::executeThread, this);
th.join(); // Without this join() or while(1) loop, thread will terminate
//while(1);
#elif 0
std::thread(&Task::executeThread, this); // Thread creation without thread object
#else
std::thread( std::bind(&Task::executeThread, this) );
while(1);
#endif
}
int main()
{
Task* taskPtr = new Task();
std::cout << "\ntaskPtr: " << taskPtr << std::endl;
taskPtr->startThread();
delete taskPtr;
return 0;
}
Спасибо и С уважением
Вишну Бима