Hello all again .
i have couple of questions again which i would appreciate any kind of help and answer,
my first question is about packaged_task and how we can use it ,
i mean i tried using packaged_task with functions ,  with parameters , and i got errors doing it . so do we always have to use class or stcucts in order for us to use packaged_task ?
how can i send some arguments to a function when im trying to make a package out of ?
i have done the packaging with parameterelss functions , but i dont know how im supposed to pass parameters ! :
here is my application working with parameterless functions .
//in the name of GOD
//Seyyed Hossein Hasan Pour
//Learning Boost- How Threading works in Boost
//How to pass parameters to functions in packaged_task
#define BOOST_THREAD_USE_LIB
#include <iostream>
#include <cstdlib>
#include <boost/thread.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
using namespace std;

vector<int> SharedResource;
boost::shared_mutex sharedMutex;

int FillSharedResource()
{
    int numberOfItems=10;
    for (int i = 0; i< numberOfItems; i++)
        {
            boost::unique_lock<boost::shared_mutex> lock(sharedMutex);
            SharedResource.push_back(i);
            lock.unlock();
        }
        return 10;
}

int Print1()
{
    for (int i = 0; i< SharedResource.size(); i++)
        {
            boost::this_thread::sleep(boost::posix_time::seconds(1));
            boost::lock_guard<boost::shared_mutex> locker(sharedMutex);
            cout<<boost::this_thread::get_id()<<"\tItem: "<<SharedResource[i]<<endl;
        }
        return 101;
}

int Print2()
{
    for  (int i = 0; i< SharedResource.size(); i++)
        {
            boost::this_thread::sleep(boost::posix_time::seconds(1));
            boost::lock_guard<boost::shared_mutex> locker(sharedMutex);
            cout<<boost::this_thread::get_id()<<"\tItem: "<<SharedResource[i]<<endl;
        }
        return 102;
}

int main()
{

    boost::packaged_task<int>
    pkg0(FillSharedResource),
    pkg1(Print1),
    pkg2(Print2);

    boost::thread
    t0(ref(pkg0)),
    t1(ref(pkg1)),
    t2(ref(pkg2));

    boost::unique_future<int>
     f0(pkg0.get_future()),
     f1(pkg1.get_future()),
     f2(pkg2.get_future());

  std::cout<< f0.get()<<"\n"<<  f1.get()<<  "\n"<< f2.get();

    system("pause");
    return 0;
}

-------------------------
can someone show me a simple sample of using Promise in threading ? i mean i already know about future , whats the need for Promise ? !

--------------------------
whats the different between read_some and async_read_some ? in asio ?
--------------------------
i know that when i need to send an argument to event handler ( signal  ) , i frist should declare sth like this :
boost::signal2::signal <function-return-type (paramerter type)> mysignal ;
mysignal.connect(myfunc,my-functions-argumant);
mysignal.connect(myfunc2,my-function2s-argumant);

now if i have couple of functions with the same signature , doing different jobs with different arguments , how can i give their respective arguments ?
i mean at the moment , i can only write :
mysignal(5);!
and this passes 5 to all functions connected with this signal! do i really have to make one signal for each functions ?so that i can pass different and yet with the same type argument to different functions using one signal .  is'nt there any other way around it ?

if inside a signal , i run a thread and then i block that signal using signal.block , would that block that thread too ? and then unblocking it would it unblock that thread too ? is it safe doing this ?
---------------------------
why do we use function names with const that the end of it ? i mean sth like this :
void operator()() const
{
}
or
void boostFunctionName(sth) const
{
}

what is that const for ? what does it declare ? why is it necessary to use it that way ?

--------------------
how do i serialize a class of mine ? i mean i read that if i have vector , i need to use some functions , if i have foo i need another function ! what exactly do you serialize your classes ? i mean maybe i have std::string , char , vectors of some kind , and a self made class or type used in my class to be serialized , how should i go about it . any guidance is greatly appreciated  .
---------------------
i tired to use boost::container::vector for storing my threads , and it went just fine . but i have a problem in determining which thread is which , i mean i already found out that i can use if-else for this matter , but since i used a vector , and the number of threads being created at run-time is not known , so i need to use a for statement so that i can iterate throuh all of th evectors  items and then if i find a match , i do as i wish . the problem is , when i try to have sth like this , it fails :
    boost::id id = myvect[0]
i want to pass this id for matching operation ( or declare it as global ) , what am i missing again ?
another problem i have in this regard is that , when i store my threads in a lets say vector just like the sample i gave earlier , it is not guaranteed that threads inside that vector actually points to a legal thread of execution by the time i go to check for sth .!( i mean there is a good chance that they already ran and got terminated!) seemingly i can not use joinable to see if i am dealing with an active or lets say legitimate thread ! , my question is , how can i check to see if an object of type thread , actually points to sth real ?
how to check that ?
---------------------
when i try to compile source codes using Asio using MingW , i get linking errors ! what is the cause and how can i fix that ?
i get the errors:
C:\boost_1_49_0\boost\asio\detail\impl\winsock_init.ipp|39|undefined reference to `WSAStartup@8'|
C:\boost_1_49_0\boost\asio\detail\impl\winsock_init.ipp|48|undefined reference to `WSACleanup@0'|

 Thank you all in advance
Seyyed Hossein Hasan Pour