同时运行两个功能

时间:2014-02-09 19:05:47

标签: c++ visual-studio-2010

我有两个功能。我如何同时运行两个功能?我知道应该使用线程。 我需要一个多线程的例子。我正在使用Visual Studio 2010

3 个答案:

答案 0 :(得分:2)

您可以使用_beginthread

void CalculatePrimes(void*)
{
  // Do something
}

void TransmitFile(void*)
{
  // Do domething
}

int main()
{
  uintptr_ x = _beginthread(CalculatePrices,0,NULL);
  uintptr_ y = _beginthread(TransmitFile,0,NULL);

  return 0;
}

如果您可以访问C ++ 11,则可以使用std::thread

void CalculatePrimes()
{
  // Do something
}

void TransmitFile()
{
  // Do domething
}

int main()
{
  std::thread x(CalculatePrices);
  std::thread y(TransmitFile);

  // Both function are now running an different thread
  // We need to wait for them to finish

  x.join();
  y.join();

  return 0;
}

而且,如果你想了解金属,你可以使用CreateThread api:

DWORD WINAPI CalculatePrimes(void *)
{
  // Do something
  return 0;
}

DWORD WINAPI TransmitFile(void *)
{
  // Do something
  return 0;
}

int main()
{
  HANDLE x=::CreateThread(NULL,0,CalculatePrimes,NULL,0,NULL);
  HANDLE y=::CreateThread(NULL,0,CalculatePrimes,NULL,0,NULL);

  // Wait for them to finish
  ::WaitForSingleObject(x,INFINITE);
  ::WaitForSingleObject(y,INFINITE);

  return 0;
}

答案 1 :(得分:1)

如果您使用的是MFC,可以使用AfxBeginThread创建CWinThread

UINT SomeFunction(LPVOID pParam)
{
    CSomeObject * pObject = (CSomeObject*)pParam;

    // do stuff

    return 0;   // thread completed successfully
}

int main()
{
    CSomeObject pObject = new CSomeObject;
    AfxBeginThread(SomeFunction, pObject);

    ...

    return 0;
}

有关详细信息,请参阅MSDN for AfxBeginThread

答案 2 :(得分:1)

<的MSDN参考资料线程>只回到VS2012,而不是VS2010。您可以更新到VS2012(您还需要运行Win 7或Win 8)这是一个用C编写的Windows控制台程序的zip链接,它使用两个线程复制文件,创建一个执行写入的线程。它使用Windows互斥锁和信号量来实现线程间单链接消息传递接口。

mtcopy.zip