Определите потоки в Visual Studio 2010 - PullRequest
0 голосов
/ 27 ноября 2011

Я хочу создать приложение C ++ в Visual Studio 2010, которое содержит 2 потока:

  1. чтение данных из внешнего файла
  2. запись данных во внешний файл

Я уже читал теорию о многопоточности, но не совсем понимаю, как ее использовать. Есть ли кто-нибудь, кто может показать мне, как я могу просто определить и запустить эти 2 потока в Visual Studio 2010?

В настоящее время у меня есть следующий пример, который не работает:

class Thread
{
   public:
      Thread();
      int Start(void * arg);
   protected:
      int Run(void * arg);
      static void * EntryPoint(void*);
      virtual void Setup();
      virtual void Execute(void*);
      void * Arg() const {return Arg_;}
      void Arg(void* a){Arg_ = a;}
   private:
      THREADID ThreadId_;
      void * Arg_;

};

Thread::Thread() {}

int Thread::Start(void * arg)
{
   Arg(arg); // store user data
   int code = thread_create(Thread::EntryPoint, this, & ThreadId_);
   return code;
}

int Thread::Run(void * arg)
{
   Setup();
   Execute( arg );
}

/*static */
void * Thread::EntryPoint(void * pthis)
{
   Thread * pt = (Thread*)pthis;
   pt->Run( pt->Arg() );
}

virtual void Thread::Setup()
{  
    // Do any setup here
}

virtual void Thread::Execute(void* arg)
{
        // Your code goes here
}

Я также открыт для хороших уроков или примеров кода.

1 Ответ

0 голосов
/ 27 ноября 2011

Если программа не компилируется, вы должны включить заголовки неопределенных функций, как указано в http://www.MSDN.com. Также убедитесь, что поток не запускается с точки входа DLL (например, DllMain ()).

Кроме того, вы должны скомпилировать с поддержкой многопоточности (я считаю, что это опция / MT).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...