我有两个功能。我如何同时运行两个功能?我知道应该使用线程。 我需要一个多线程的例子。我正在使用Visual Studio 2010
答案 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互斥锁和信号量来实现线程间单链接消息传递接口。