網站首頁 學習教育 IT科技 金融知識 旅遊規劃 生活小知識 家鄉美食 養生小知識 健身運動 美容百科 遊戲知識 綜合知識
當前位置:趣知科普吧 > 綜合知識 > 

怎麼寫多線程

欄目: 綜合知識 / 發佈於: / 人氣:2.31W
1. 按鍵精靈多線程怎麼寫

多線程寫法也很簡單,而且容易看懂,修改參數比較簡單

怎麼寫多線程

BeginThread A

Delay 10

BeginThread B

Delay 10

BeginThread C

Sub A()

While true

KeyPress "A", 1

For 10

Delay 1000

Next

Wend

End Sub

Sub B()

While true

KeyPress "B", 1

For 3

Delay 1000

Next

Wend

End Sub

Sub C()

While true

KeyPress "C", 1

For 7

Delay 1000

Next

Wend

End Sub

2. 按鍵精靈多線程怎麼寫

按鍵精靈是沒多線程的,只有一個僞多線程。

推薦樓主使用TC簡單開發軟件,TC的多線程,纔是程序裏面真正的多線程。 開啓多線程的優點和缺點 提高介面程序響應速度。

透過使用線程,可以將需要大量時間完成的流程在後臺啓動單獨的線程完成,提高前臺介面的相應速度。 充分利用系統資源,提高效率。

透過在一個程序內部同時執行多個流程,可以充分利用CPU等系統資源,從而最大限度的發揮硬件的性能。 當程序中的線程數量比較多時,系統將花費大量的時間進行線程的切換,這反而會降低程序的執行效率。

但是,相對於優勢來說,劣勢還是很有限的,所以現在的項目開發中,多線程編程技術得到了廣泛的應用。

3. 在java中怎樣寫個多線程併發

多線程有兩種形式,一種是直接讓當前類繼承 Thread 重寫run方法來實現,另一種是使用 Runnable接口。推薦第二種方法。

例:

public class Counter {

public volatile static int count = 0;

public static void inc() {

//這裏延遲1秒,使得結果明顯

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

}

count++;

}

public static void main(String[] args) {

//同時啓動1000個線程,去進行i++計算,看看實際結果

for (int i = 0; i

4. 求教一種正確的多線程寫法

其實你的這個需求很容易達到.我先說一下我的廢話吧..第二張數據庫表OutDoor(字段:ID、name、CardId、time1,time2),此表記錄固定(寫死的)把他快取到ASP.NET中然後監視AccessDoor表.或者在ADD方法中.添加代碼當ADD時,拿出快取,判斷是否存在.打上標籤..這樣寫.沒有任何服務器壓力SQL壓力.實現你的內容..下面會給你解釋些爲什麼要按照我這麼做..下面都是按照你來的那種了哦~!線程,ASP.NET?我好奇你如果是IIS作爲宿主,你是在APPLACTION級別寫的代碼麼?我幫你解答,但並不推薦哦,因爲IIS的線程池是有限的,具體詳見,進程與線程的關係,如果想了解可以提問.先幫你回答你的問題吧如果你不知道把這些代碼放在哪裏,,那您就先應該溫習線程在ASP.NET中如何使用以及C#的線程在ASP.NET中的使用注意事項。

我的下方所示代碼均寫在全局配置檔案中哦.當然也可以寫在C#的普通類檔案,但是那時候我怕你控制不住線程.ASP.NET開線程的話給你提供三種備選方式1.thread t=new thread(yourMethon)T.START()YourMethon的外層結構爲While()或DO WHILE()大概爲While(true){//這裏寫你的代碼..//OK.你要查詢數據庫,暫且叫他做CommentToDataBaseFunction//我就CommentToDataBaseFunction();//調用查詢數據庫Thread.CurrentTheard.Sleep(1000);.//防止在IIS串線程以及更好的控制線程,這麼寫是最推薦的我這裏是手寫了.不對的話你自己修改一下}2.使用ASP.NET中的Timer道理與上面一樣,但是使用過程中特別注意別同時引用了兩種Timer 我記不大清楚了,一個實在THREAD.TIMER,另外一個好象是WINFORMS的還有ASP,NET的都有一種是控件類型,一種是線程的基本版.如果是控件的話那麼代碼是Timer myTimer=new timer();哎呀..我承認這控件的構造函數忘掉了。哈哈Mytimer.時間=1000;//。

我丟人了..哈哈好吧.我非聖賢嘛。MytIMER.TICKER+=CommentToDataBaseFunction()3.既然是ASP.NET那肯定少不了WEB前臺式的查詢在web前臺方式查詢數據庫那麼分爲兩種起始道理一樣,使用JS或JQ發送AJAX查詢即可這兩種的你去百度一下具體代碼。

如果不知道你在問吧..下來是你的查詢數據庫代碼CommentToDataBaseFunction該方法就簡單了..發一條SQL即可..其實在我看來你的問題完全是模糊不清楚的該線程"每秒"掃描數據庫表AccessDoor(字段:ID、name、CardId、time1,time2)(表數據已插入)並時刻返回數據記錄、整個表麼?如果是。你這玩意效率真心低了..OK..不扯淡..給你說具體..另外:表AccessDoor的查詢記錄與第二張數據庫表OutDoor(字段:ID、name、CardId、time1,time2),此表記錄固定(寫死的)。

數據匹配,有相同項則返回1,否則返回0。按照你的PS內容,.你是想讓我給你寫SQL吧..OK。

SQL張這樣哈..我仍舊僞代碼了.Select *,(select case when exists(select*from OutDoor where 挨個寫。. 字段)a then 1 else 0 end ) from AccessDoor好吧這樣應該是可以滴..我網吧坐着呢..要是不行.你把提示給我.容我再燃燒燃燒大腦。

然後1存在0不存在多出來一個未命名字段..要命名的話你就AS一下就好了友情提示啊..IIS的線程歸IIS進程所管,如果你長時間狂刷IIS的線程,你這麼開開關關的..要是寫在APPLACTION級別我倒還能接受那麼一點點,如果你寫在ASHX或者C#代碼中,,如果你是我屬下..我1000%抽你..因爲除過APPLACTION級別以外..ASHX與C#均是以客戶端的個數爲單位的.大部分不懂.NET框架的人都說什麼CLR.什麼的.其實線程在真正的回收仍需要時間,,當然根據你硬件來講..如果以客戶端爲單位假設開關100線程中實際存在的線程爲101.那麼1000個在線客戶就可以達到10W線程.10W。這線程還不直屬於WINDOWS還奴屬於IIS進程。

.所以..你看着弄吧..如果是APPLACTION的話我倒也不反對,但是你的這個網站這一塊就會造成實際的SQL連接池壓力(前提是你不查詢整個表如果查詢整個表..你連接池佔不滿.你內存會佔滿)如果讓我給你些建議的話..把代碼寫在APPLACTION級別,也就是那個什麼GOLBX什麼什麼玩意的那麼..寫在APPLACTIONSTART的那個事件中,,然後寫一個APPLACTION變量,將當前最新的ID查詢出來,存進去.上面的SQL加一個WHERE 條件..ID>XXXX這樣效率會高點.再高的話..你做快取..或者在ADD時編寫代碼。

5. C# 如何寫多線程程序

我用的是VS2005,

線程的實現可以用種方法..目前我知道的.一種是安全調用,一種是不安全調用

先說不安全調用

先加入命名空間 using System.Threading;

然後在要用新線程執行的方法中加入

Thread a=new Thread(new ThreadStart(sayhi());

然後用a.start();開始新的線程,執行的代碼放到

private void sayhi()

{

Messagebox.Show("Hello New Threading");

}

這樣執行的話,就算關了主介面,這個對話框也不會消失

如果想在這個新進程中改變主程序中的介面,則需要在改變前加入一句話

System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;

這樣就可以在新的進程中操作主窗體的控件,比如label1.Text="Hello";

另一種方法是安全調用,不過VS2005中提供的BackgroundWorker,可以很方便的進行調用線程,同樣,想透過新進程訪問主程序的話 也是需要加入

System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;

BackgroundWorker控件很方便,

託一個到設計介面裏,雙擊這個控件,然後會生成一個private void backgroundWorker1_DoWork(object sender,EventArgs e)事件

把新線程要做的工作寫在下邊的代碼裏

然後透過this.backgroundWorker1.RunWorkerAsync();調用DOWORK的代碼

而且還可以用private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)可以做的收尾工作.

在BackgroundWorker的方法列表中有

6. c語言如何編寫一個簡單的多線程程序

這是一個多線程例子,裏面只有兩個線程,是生產者/消費者模式,已編譯透過,註釋很詳細,如下:/* 以生產者和消費者模型問題來闡述Linux線程的控制和通信你 生產者線程將生產的產品送入緩衝區,消費者線程則從中取出產品。

緩衝區有N個,是一個環形的緩衝池。 */#include #include #define BUFFER_SIZE 16 struct prodcons { int buffer[BUFFER_SIZE];/*實際存放數據的數組*/ pthread_mutex_t lock;/*互斥體lock,用於對緩衝區的互斥操作*/ int readpos,writepos; /*讀寫指針*/ pthread_cond_t notempty;/*緩衝區非空的條件變量*/ pthread_cond_t notfull;/*緩衝區未滿 的條件變量*/ };/*初始化緩衝區*/ void pthread_init( struct prodcons *p) { pthread_mutex_init(&p->lock,NULL); pthread_cond_init(&p->notempty,NULL); pthread_cond_init(&p->notfull,NULL); p->readpos = 0; p->writepos = 0; }/*將產品放入緩衝區,這裏是存入一個整數*/ void put(struct prodcons *p,int data) { pthread_mutex_lock(&p->lock); /*等待緩衝區未滿*/ if((p->writepos +1)%BUFFER_SIZE ==p->readpos) { pthread_cond_wait(&p->notfull,&p->lock); } p->buffer[p->writepos] =data; p->writepos++; if(p->writepos >= BUFFER_SIZE) p->writepos = 0; pthread_cond_signal(&p->notempty); pthread_mutex_unlock(&p->lock); }/*從緩衝區取出整數*/ int get(struct prodcons *p) { int data; pthread_mutex_lock(&p->lock); /*等待緩衝區非空*/ if(p->writepos == p->readpos) { pthread_cond_wait(&p->notempty ,&p->lock);//非空就設定條件變量notempty } /*讀書據,移動讀指針*/ data = p->buffer[p->readpos]; p->readpos++; if(p->readpos == BUFFER_SIZE) p->readpos = 0; /*設定緩衝區未滿的條件變量*/ pthread_cond_signal(&p->notfull); pthread_mutex_unlock(&p->lock); return data; } /*測試:生產站線程將1 到1000的整數送入緩衝區,消費者線程從緩衝區中獲取整數,兩者都打印資訊*/#define OVER (-1) struct prodcons buffer; void *producer(void *data) { int n; for( n=0;n { printf("%d ------>n",n); put(&buffer,n); } put(&buffer,OVER); return NULL; } void *consumer(void *data) { int d; while(1) { d = get(&buffer); if(d == OVER) break; else printf("----->%dn",d); } return NULL; } int main() { pthread_t th_p,th_c; void *retval; pthread_init(&buffer); pthread_create(&th_p,NULL,producer,0); pthread_create(&th_c,NULL,consumer,0); /*等待兩個線程結束*/ pthread_join(th_p, &retval); pthread_join(th_c,&retval); return 0; }。

7. 如何學會多線程工作

轉載這是一個很有意思的問題,我準備先介紹一下心理學上對這個問題的看法,然後從自己的思考和經驗出發談一談應對之道。

的確,從認知心理學的觀點來看,嚴格來講人的「多線程工作」是不可能的。因爲在任一個瞬間,人只能有一個「注意焦點」,這個注意焦點牽引了人的認知加工資源。

但有時你會誤以爲同時關注了兩個東西,其實是發生了注意轉移的結果,即焦點從一個對象轉移到另一個對象上,實際上還是一個串行而非並行的過程。當然有一種例外是,有些很熟練的技能,可以「自動化」地、不加註意地進行,那麼就可以和其他事情同時做。

比如你騎自行車,你的女朋友坐在後面笑,這時你的注意焦點保持在你女友身上,你和她聊天的同時,你的腿也在一刻不停地蹬,你不需要停下來是因爲騎車不需要你的注意和認知資源。但如果此時突然前面躥出一隻喵星人,你可能立馬就會把注意焦點給轉移了。

當然題主煩惱的並非是這種「秒級」、「毫秒級」的「多線程」,而是指在一個「時期」內,會同時擔負幾種不同的工作,完成不同的任務,這就是另一種意義上的,不同任務之間需要切換的「多線程」。「任務切換(task switching)」也可以算認知心理學中的一個經典課題了。

心理學家早就發現,當你從任務A切換到任務B後,執行任務B的績效要明顯比非任務切換條件下執行B的績效差,這個差異稱爲「切換代價(switching cost)」。切換代價的形成原因主要有兩種,一是任務A留下的認知慣性,也就是我之前已經習慣了任務A的認知情境、反應方式,這個慣性會對完成任務B造成干擾,二是做B的時候需要對B進行認知重構,重新回憶起B的相關背景和資訊,這個重構也需要時間,而且可能不完整。

可現實就是這樣,雖然不論從心理學還是從我們的生活經驗來看,這種需要任務切換的「多線程」的感覺很糟,效率很低,但我們往往沒有選擇:一個任務做到一半被打斷,然後去做另一個任務,然後又被打斷,又去做另一個……這裏有個至關重要的事實是:如果你是在非常投入和忘我的思考時被打斷,那麼你的「損失」和懊惱就會非常大,相反,如果你只是在做抄寫一篇文檔這種不動腦子的活,那麼即便是頻繁的中斷也不會對你造成太大的影響。所以,如果你能選擇好合適的中斷點,中斷就並不可怕,切換的損失也可以降到最低,如果說多任務工作有什麼技巧的話,那麼這個技巧就是「對中斷點進行控制和管理的技巧」。

這個技巧的前提是,我們需要對要完成的任務進行有效地剖析,區分出「容忍中斷」的部分和「無法容忍中斷」的部分,然後用可保證的相對完整的時間去施行那些「無法容忍中斷」的部分。爲此我提出了一般任務分解的「三明治模型」: 這是一個金槍魚三明治,它有一個核心,就是金槍魚肉泥,完成這個部分的努力我稱爲「核心思考區間」。

事實上大多數任務都有一個至關重要、通常也是最棘手的部分,這個部分需要我們集中精力、非常專注地進行思考,然後將其破解,一旦這個部分被我們「吃下」,那麼這個任務就已經完成了大半,餘下的就是一些支援性的、補完性的工作(即「支援性思考區間)和一些「體力勞動」(即「操作性動作區間」)了。 我自己工作中有一個習慣,就是拿到一個任務後,勢必要先去找那個任務的核心思考區間,找到那塊硬骨頭,去啃下來,而不是先去做那些周邊的打掃性的工作。

舉個簡單的例子,如果你現在接到一個做PPT的任務,你第一步準備做什麼?是先挑一個漂亮的主題模板嗎?不是。是馬上去百度谷歌查資料嗎?也不是。

正確的答案是:設計PPT的架構。即你要分析你的受衆,他們的知識水平、理解水平以及興趣點、關注點,在此基礎上設計你的內容以及展現內容的順序,先講什麼,佔比多少,再講什麼,佔比什麼,以及講的時候採取什麼風格、策略,然後,PPT的架構就出來了。

這個實施過程就是該任務的「核心思考區間」,你不需要任何輔助,你只需思考,非常專注的思考,你要的工具,僅僅是一張紙和一隻筆(你需要把你的靈感快速地記下來)。等你完成了這個過程,你可以選擇繼續填充具體的內容(「支援性思考區間」),也可以break一下,也可以去做別的工作,都無所謂。

之後,等你在爲這件PPT選擇模板、尋找配圖或者調整字型的時候(「操作性動作區間」),你並不大會介意被打斷,因爲你知道,這個任務在某種意義上,你已經完成了。 不瞞你說,爲了寫這個答案,我用了半個小時的時間、一張A4紙和一隻筆,用我純粹的、專注的思考,來設計它的「架構」。

設計完成後,我吃了一頓晚飯,看了一集美劇,這個寫作的中斷並沒有讓我擔心,因爲我知道,即便我還沒有在電腦上敲入一個字,這個答案,其實已經寫完了。 這就是多線程工作的祕訣。

很多時候,你只是需要一個專注不受干擾的、能純粹跳脫出來思考的、能達至「心流」狀態的、能把最關鍵的「硬核」搞定的——半小時。 這個方法背後暗含着這樣一個邏輯:當我們不得不對一個任務進行分段處理時,我們並不應機械地按照時間段來切分(「今天上午9點至10點做A,明天下午1點至3點繼續做A」),而是應該按照這。

8. Java多線程的幾種寫法

有三種:

(1)繼承Thread類,重寫run函數

創建:

class xx extends Thread{

public void run(){

Thread.sleep(1000) //線程休眠1000毫秒,sleep使線程進入Block狀態,並釋放資源

}}

開啓線程:

對象.start() //啓動線程,run函數執行

(2)實現Runnable接口,重寫run函數

開啓線程:

Thread t = new Thread(對象) //創建線程對象

t.start()

(3)實現Callable接口,重寫call函數

Callable是類似於Runnable的接口,實現Callable接口的類和實現Runnable的類都是可被其它線程執行的任務。

Callable和Runnable有幾點不同:

①Callable規定的方法是call(),而Runnable規定的方法是run().

②Callable的任務執行後可返回值,而Runnable的任務是不能返回值的

③call()方法可拋出異常,而run()方法是不能拋出異常的。

④執行Callable任務可拿到一個Future對象,Future表示異步計算的結果。它提供了檢查計算是否完成的方法,以等

待計算的完成,並檢索計算的結果.透過Future對象可瞭解任務執行情況,可取消任務的執行,還可獲取任務執行的結果

9. c++如何寫多線程,分一個線程來實時更新結果,具體如下

#include

#include

#include

volatile HANDLE waitForStart;

volatile HANDLE waitForResult;

volatile int result;

DWORD APIENTRY task(LPVOID* p)

{

for(;;)

{

WaitForSingleObject(waitForStart, INFINITE);

++result;

SetEvent(waitForResult);

}

return 0;

}

int main()

{

HANDLE thread;

result = 0;

waitForStart = CreateEvent(0, FALSE, FALSE, 0);

waitForResult = CreateEvent(0, FALSE, FALSE, 0);

thread = (HANDLE)_beginthreadex(0, 0, task, 0, 0, 0);

CloseHandle(thread);

for(;;)

{

SetEvent(waitForStart);

WaitForSingleObject(waitForResult, INFINITE);

printf("%dt", result);

}

return 0;

}

Tags:多線程