2014-02-09 127 views
0

我有兩個函數。我將如何同時運行兩個函數?我知道應該使用線程。 我需要一個多線程的例子。我使用Visual Studio 2010同時運行兩個函數

回答

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

如果您正在使用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

你必須寫一個MFC應用程序調用'AfxBeginThread' – Sean

+1

@Sean真的,我錯誤地認爲是這樣的話,當我讀到「使用Visual Studio 2010」。編輯提到MFC的答案。 – schumacher574

1

< thread>的MSDN參考僅返回到VS2012,而不是VS2010。您可以更新到VS2012(您還需要運行Win 7或Win 8)。這是一個用C編寫的Windows控制檯程序的zip鏈接,它使用兩個線程來複制文件,創建一個線程來執行寫入。它使用Windows互斥鎖和信號量來實現線程間單鏈表消息傳遞接口。

mtcopy.zip