Contents
- Method 1: Boost.Thread
- Method 2: pthreads (POSIX)
- Method 3: Windows threads
- Method 4:
std::thread
(C++11)
Method 1: Boost.Thread
#include <iostream>
#include <string>
#include <boost/thread.hpp>
class Hello
{
public:
void operator()(const std::string& msg) const
{
std::cout << msg << "\n";
}
};
int main()
{
boost::thread t = boost::thread(Hello(), "Hello");
t.join();
}
Method 2: pthreads (POSIX)
#include <iostream>
#include <pthread.h>
void* hello(void *msg)
{
std::cout << static_cast<const char*>(msg) << "\n";
return NULL;
}
int main()
{
pthread_t thread;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
char msg[] = "Hello";
int status = pthread_create(&thread, &attr, hello, msg);
pthread_attr_destroy(&attr);
if (status != 0) {
std::cerr << "Failed to create thread\n";
return 1;
}
status = pthread_join(thread, NULL);
if (status != 0) {
std::cerr << "Failed to join thread\n";
return 1;
}
}
Method 3: Windows threads
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <Windows.h>
#include <process.h>
#include <iostream>
void hello(void *msg)
{
std::cout << static_cast<const char*>(msg) << "\n";
}
int main()
{
char msg[] = "Hello";
HANDLE thread = reinterpret_cast<HANDLE>(_beginthread(hello, 0, msg));
if (thread == INVALID_HANDLE_VALUE) {
std::cerr << "Failed to create thread\n";
return 1;
}
WaitForSingleObject(thread, INFINITE);
}
Method 4: std::thread
(C++11)
#include <string>
#include <iostream>
#include <thread>
void hello(const std::string& msg)
{
std::cout << msg << "\n";
}
int main()
{
std::thread t(hello, "Hello");
t.join();
}