2012-07-23 35 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

要么做只有一个主,并从那里启动多个线程。或者一个主要的,你可以分叉几个进程。

相关问题