2012-07-23 63 views
-2

我需要在MS Windows上使用2個硬件CPU來獲得性能。我寫了如下代碼:如何在C/C++中使用源代碼級多線程?

#include "windows.h" 

int main1(int argc, CHAR* argv[]) 
{ 
    // ... 
} 

int main2(int argc, CHAR* argv[]) 
{ 
    // ... 
} 

要寫兩個主要功能 - 每個CPU一個。編譯器告訴我:

D:/MinGW/x86_64-w64-mingw32/lib/../lib/libmingw32.a(lib64_libmingw32_a-crt0_c.o):crt0_c.c:(.text+0x3d): undefined reference to `WinMain' 
collect2.exe: error: ld returned 1 exit status 

我在做什麼錯?我如何編寫兩個主電源使它們在兩個不同的CPU上運行? _tmain1, _tmain2也沒有幫助。

+2

是'threads'術語你要找的? – fork0 2012-07-23 14:00:30

+1

對於Intel處理器,您可以使用以下代碼void main0()void main1(){{}} – 2012-07-23 14:09:08

+0

這是如何工作的?你需要用intel編譯器進行編譯嗎? – Brady 2012-07-23 14:29:35

回答

3

您創建一個主體,並啓動另一個線程,爲其設置處理器關聯性。

僞代碼:

int main1(){...} 
int main2(){...} 

int main() 
{ 
    main2_thread = StartThreed(main2); 
    SetProcessorAffinity(this_thread, 0); 
    SetProcessorAffinity(main2_thread, 1); 
    main1(); 
} 
4

一個進程中只能有一個main函數。從這個函數中,你可以啓動多個線程。這裏是一個非常簡單的例子:

#include <iostream> 
#include <Windows.h> 
#include <process.h> 

void thread_func(void* v) 
{ 
    std::cout << "Hello: " << *(int*)v << std::endl; 
} 

int main() 
{ 
    int i = 1; 
    ::_beginthread(thread_func, 0, &i); 

    int i2 = 2; 
    _beginthread(thread_func, 0, &i2); 

    Sleep(1000); 
} 
+0

對初學者來說,這是一個相當糟糕的例子......我至少要提供(或指出需要)加入+清理(我是一本寫得不好的C書的受害者,很多年前 - 如果不是那本書,我會更快地學會這些東西)。 – 2012-07-24 02:25:01

2

要麼做只有一個主,並從那裏啓動多個線程。或者一個主要的,你可以分叉幾個進程。

相關問題