$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: Terry G (tjgolubi_at_[hidden])
Date: 2006-11-24 10:11:38
Fred J." wrote
The code below compiles and runs, but does not do what I want.
how can I get the code below to print out:
"I am child 1sub thread called."
Hi Fred!
Three things I noticed.
I'm not a user of boost.thread, but I did get your example to work.
Three things.
(1) I think you want to pass a reference to p1 and c1, rather than copy 
them.
(2) std:string is not thread-safe.
(3) You need to delay to allow the other threads time to run.
#include <boost/thread/thread.hpp>
#include <iostream>
#include <windows.h>
using namespace std;
class Child {
  const char* c;
public:
  typedef void result_type;
  Child(const char* x):c(x){ }
  void operator()(){
    cout << c << " sub thread called." << endl;
  }
}; // Child
class Parent {
  const char* p;
public:
  typedef void result_type;
  Parent(const char* x):p(x){}
  void operator()(){
    cout << p << "thread called." << endl;
    Child c1("I am child 1");
    boost::thread c1t(ref(c1));
    Sleep(10);
  }
}; // Parent
int main(){
  Parent p1("I am parent 1: ");
  boost::thread p1t(ref(p1));
  Sleep(10);
  return 0;
} // main