2011-10-26 71 views
0

我看到這個問題Simple example of threading in C++ 但我的問題是,我想在Windows 32中運行此程序,似乎Pthread無法識別在Windows!請告訴我什麼是問題?這是我的錯誤: 致命錯誤C1010:查找預編譯頭時出現意外的文件結尾。 ?你忘了「#包括文件‘StdAfx.h’」添加到您的源(我加的#include「StdAfx.h中,但它仍然 不工作!)Windows線程與C++

#include <pthread.h> 
#include <stdio.h> 
#include <stdlib.h> 
#define NUM_THREADS 5 

void *PrintHello(void *threadid) 
{ 
    long tid; 
    tid = (long)threadid; 
    printf("Hello World! It's me, thread #%ld!\n", tid); 
    pthread_exit(NULL); 
} 

int main(int argc, char *argv[]) 
{ 
    pthread_t threads[NUM_THREADS]; 
    int rc; 
    long t; 
    for(t=0;t<NUM_THREADS;t++) 
    { 
    printf("In main: creating thread %ld\n", t); 
    rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t); 
    if (rc){ 
     printf("ERROR; return code from pthread_create() is %d\n", rc); 
     exit(-1); 
     } 
    } 

    /* Last thing that main() should do */ 
    pthread_exit(NULL); 
    } 
+1

你看了這個錯誤嗎? – SLaks

+0

我添加了#include「StdAfx.h」,但它仍然不能識別pthread! – Sara

+0

現在你包含了什麼錯誤「StdAfx.h」? – ChrisF

回答

3

因爲線程體系結構相關的概念,你將不能夠使用pthread而不使用某種包裝或使用特定於Windows的線程函數。

你有三種選擇

  1. 使用並行線程-win32的(包裝爲Win32線程函數:http://sourceware.org/pthreads-win32/
  2. 使用Windows特定線程功能使用#ifdef來_WIN32的#else #ENDIF左右
  3. 使用升壓包裹線程庫

編輯:爲C1010錯誤,請上面的回答。

+0

呀,用Boost.Thread – totowtwo

+0

+1的並行線程-win32的 –

2

根據你的編譯器錯誤:

fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "StdAfx.h"' to your source?

...問題無關與並行線程它與precompiled header files

您可以:。

  1. 在項目中使用預編譯頭文件關閉。項目>設置> C/C++>預編譯頭
  2. 做到像錯誤提示,並添加#include "stdafx.h"作爲CPP文件的第一行
+0

,它是.cpp文件的第一行是非常重要的。 –

+0

是的,我把它放在第一線,但仍我有錯誤:( – Sara

+0

@約翰:對不起,我不能投你的答案,但我真的很感激:) – Sara