⑴ 關於c++中多線程的問題
必須要工程設置是多線程的。輸出都混在一起看不清,把它們寫入文件就容易看了,那個this指針直接傳就行,沒有必要多轉一次:
class A
{
public:
int i;
HANDLE jb;
A(int j)
{
i=j;
jb=CreateThread(NULL,0,lang,LPVOID(this),0,NULL);
}
static DWORD WINAPI lang(LPVOID p){
((A*)p)->move();
return 0;
}
void move()
{
char buf[100];
sprintf( buf, "%d.txt", i );
std::ofstream fout( buf );
int j=0;
while(1){
fout<<"this "<<i<<" :"<<j++<<endl;
}
}
};
⑵ 求助 線程問題 gcc編譯通過 g++編譯失敗
C++禁止將void指針隨意賦值給其他指針。
因此你在把void thread(void)函數的入口轉換為void*,然後當作參數調用pthread_create時就出現錯誤,因為pthread_create的參數里應該是指向形如void* fun(void*)函數的一個指針。
可以修改void thread(void)為void* thread(void*),然後去掉調用時的(void*)強制轉換,錯誤消除。
⑶ 現在用gcc編譯出來的程序能在多個核的cpu上一起跑嗎還是只能在一個核上跑
gcc編譯出來的程序能在多個核的cpu上一起跑,也可以在一個核心上執行——至少MinGW開發的多線程程序在Win2003的確如此。
國外很早就有人研究多核心進程調度問題,國內研究的人似乎不普遍。
⑷ gcc糾錯,一個有錯誤的多線程求孿生素數的c程序,20小時之內解決追加懸賞分
~~ 能不能把你的問題再說清楚一點? 我跑你的程序 我看到輸出了。我看你程序就只有一個printf()函數~~
unsigned int size = ((totbits / 32)) + 1;
bitArray = malloc((sizeof(unsigned int)) * size);
這兩條語句是不是應該寫在 while()循環的後面?否則你的數大於1000就會出現段錯誤了
⑸ 用gcc怎麼編譯多線程程序 最好寫出命令來
果已經寫好了源文件,那麼cd進所在的目錄gccfilename.c-ofilename./filename
⑹ c++11多線程 寫了#include<thread> 但是編譯卻報錯沒加
#include <string.h>
本身不應發生錯誤,因為它只是嵌入一個string.h文件。C的寫法,C++可用。
有的編譯器是 <strings.h>
如果編譯時告訴你缺了什麼東西,補入就可以了。
using namespace std; 是 #include <stdio.h> #include <stdlib.h> 等 std* (標准) 頭文件。
#include <string> C++ 的寫法
⑺ 如何用gcc在linux下編譯多線程c語言程序
如果已經寫好了源文件,那麼cd進所在的目錄gccfilename.c-ofilename./filename
⑻ gcc編譯線程程序,為什麼要加-lpthread,頭文件已經包含了<pthread.h>了啊
-lpthread是鏈接庫,
<pthread.h>只有申明,實現部分都在庫裡面。
創建線程時一般是把函數的指針做參數,所以要加一個取地址符號。
ret=pthread_create(&id,NULL,(void *)&thread,NULL);
另外,建議要檢查一下創建線程的返回值ret是否成功,防止影響後面的代碼。
(8)gcc多線程編譯有沒有問題擴展閱讀:
每個語言編譯器都是獨立程序,此程序可處理輸入的原始碼,並輸出組合語言碼。全部的語言編譯器都擁有共通的中介架構:一個前端解析符合此語言的原始碼,並產生一抽象語法樹,以及一翻譯此語法樹成為GCC的暫存器轉換語言〈RTL〉的後端。
編譯器最佳化與靜態程序碼解析技術(例如FORTIFY_SOURCE,一個試圖發現緩沖區溢位〈buffer overflow〉的編譯器)在此階段應用於程序碼上。最後,適用於此硬體架構的組合語言程序碼以Jack Davidson與Chris Fraser發明的演算法產出。
⑼ linux裡面線程編譯運行問題
#gcc a.c -o a #此句的-o a說明輸出目標文件為「a」;
#gcc -Wall-lpthread threadcreatetest.c #此句未註明輸出目標文件名,系統默認輸出為a.out,所以編譯之後執行./a.out文件。
如果上句也沒有指明「 -o a 」的話,輸出也是a.out,你可以試試
⑽ LINUX下多線程編譯問題
你編譯的時候有加多線程連接選項嗎? 要加上 -lpthread 或者 -pthread (盡量選後者)
例如 gcc -pthread -o test main.cpp
另外你的線程創建的不對,函數指針不能強轉類型(這里也不用轉)
pthread_create(&procter_t,NULL,(void*)procter_f,NULL);
pthread_create(&consumer_t,NULL,(void*)consumer_f,NULL);
應該是
pthread_create(&procter_t,NULL,procter_f,NULL);
pthread_create(&consumer_t,NULL,consumer_f,NULL);