Ⅰ 求VB6多線程源碼
方法 1 : CreateThread
不用多說,萬變不離其宗,這是 Win32 內創建線程的唯一系統方法,以下介紹的多線程創建方式雖然不直
接接觸這個 Win32 APi,但系統也是通過他創建的。
方法 2 : TimerSetEvent
這個函數是 Win32 系統的一個高精度計時器函數,通過調用這個函數,系統會創建一個新的線程,讓Timer
回調函數中的代碼運行在這個新線程中。
方法 3 : SHCreateThread
很多人應該沒滑沖罩見過這個函數,這是 shlwapi.dll 的一個導出函數,這個函數看字面也能理解是個創建多線
程的函數,而且。。。 他是基於對象操作的多線程函數,也就是說他能夠穩定的運行一些用上面2種方法創
建,但不能穩定運行的代碼。至少這個函數在 IDE 的環境下表現的中規中矩! 使用方法可查 API-GUIDE
方法 4 : 想起來了, CreateRemoteThread
創建遠程線程,經測試一點也不穩定,根本沒法說下去了,還不如直接調用 CreateThread
但,做為一種線程的創建方法,還是希望信鬧能夠熟悉一下,如果不用VB寫代碼,要寫跨進程線程,這是一個簡單易
行的辦法,否則只能繼續SetWindowHook了,熟悉匯編指令的還可以遠程分配內存寫硬編碼執行
方法 5 : 簡單說下 ActiveX 方式的多線程
論壇裡面有用這種方法實現的穩定多線程,代碼雖好,但我卻不會用,在倡導綠色軟體的今天,為了一個多線
程,而注冊表裡面又要多點xx,不好。。而且卸載麻煩。 用 ActiveX 創建線程與其他方式創建的線程最重
要的地方要主義,任何VB函數的調用最好都建立在新線程中新初始化的對象基礎上執行,不要跨對象調用,
而 ActiveX 的安全線程本身也正是利用了這點,不知道研究 ActiveX 的老大們有沒注意,利用他特性實
現的多線程,是初始化的判塵一個新的線程,而這個線程中初始化的對象則是整個工程。很大的資源浪費,而且有
時候還不好控制,不是你想要的效果。總之一句話,新線程中要自己初始化新的對象而且最好不要用實例繼承
方法 6 : 我的想法
記得以前 CSDN 中有人做過一個代碼,通過函數地址抓取函數內的機器碼,如果能夠知道VB何時已將代碼進
行了機器碼的轉換,然後抓取這些代碼放到數組中執行,那應該是非常穩定的。這純屬娛樂的想法,雖然能夠
實現,但有點過分了,除非是 VB 多線程的狂熱者,否則我想不該花太多力氣研究這個。
方法 7 : 非同步
論壇中很多人問,timer控制項的事件中代碼是怎麼運行的。其實這就是非同步,對於單核CPU多線程的執行方式
與非同步簡直無異。而最重要的是,VB 中用非同步實現代碼執行是安全的。其實非同步從大家開始Win GUI編程時
就開始接觸了。例如窗體的消息循環中就經常會以非同步的方式執行,1個消息正在執行的時候,另外的消息又
被執行了,也許這樣說會覺得有些亂,稍侯解釋。這個帖子內容要說的內容就完了,下一個帖子裡面有個我
忘了什麼時候寫的代碼,以那個代碼為例,介紹應用非同步。
Ⅱ 如何利用多線程,實現處理圖像的同時,實時感應滑鼠的移動,求c語言源代碼!
你這個問題可是超過200分的啊,
這個往大了說是一個比較復雜的設計方案。
實際上C語言是沒有多線程的概念的,但是我們可以通過Task來實現多任務。
簡單的說,可以採取以下方案:
定義一個主Task,將其置為常駐Task,用以進行Task調度和Task的啟動/終了和交互的管理。
定義一個Task優先順序列表,用優先順序來作為Task調度和管理的基礎。
定義一個共享域,和相應的事件分發/廣播/傳遞的管理機制,由主Task來實現各Task間的事件傳遞。
定義3個List,實現Active,Ready,Dead的Task的管理和調度。
定義各普通Task,包含Task基本信息:Task的棧指針,Task情報,Task存儲空間大埋差鍵小,Task的優先順序,Task的事件列表(定義可以接收/發送的事件,以及可以排隊的事件的個數),以及如果需要的話可以定義Task的從屬(父子)關系。
另外還有幾個注意點:
1. 通過C的臨界域(critical section)結合PV操作來實現某些Task的原子性處理要求。彎巧
2. 通過Signal來實現中斷和再開
3. 如果需要處理中斷和再開的話,一定要注意現場保護
4. 同優先順序的Task可以通過時間片輪循的方式進行多任務實現
暫時就想到這么多,有不明白慶春的通過消息進一步交流吧:)
Ⅲ 誰給個易語言的簡單的post多線程的源碼,越簡單越好,我想學下
用模塊吧 精易模塊 普通填表類
Ⅳ 多線程庫的源碼在哪,為啥在glibc裡面沒有
Linux下的glic庫的源碼鏈接:
http://ftp.gnu.org/gnu/glibc/,你可以下載最新版本的glibc-2.24.tar.gz這個壓縮文件,在Windows系統下直接用WinRAR解壓即可,如果在Linux系統下用命令行解壓的話,命令如下:tar -xzvf glibc-2.24.tar.gz。
Ⅳ 多線程和單線程有啥區別
1 、任務管理及調度:
RT-Thread - 32/256可選優先順序搶占式調度,線兄弊程數不限,相同優先順序線程時間片輪轉調度;支持動態創建/銷毀線程。
uCOS - 256優先順序搶占式調度,不允許相同陪納優先順序任務存在
2、 同步/通信機制:
RT-Thread - 支持semaphore, mutex, mailbox, message queue, event。mailbox可存儲多條消息,任務等待可按優先順序進行排隊。
uCOS -semaphore,mutex, mailbox, message queue, event。mailbox只能存放1條消息
3、內存管理:
RT-Thread -固定分區內存管理,小內存系統動態內存管理,大內存系統SLAB內存管理
uCOS - 固定大小內存塊管理
4、定時器:
RT-Thread - 掛接到系統OS定時器的硬定時器
uCOS - 只能使用OSTimeDly進行時間間隔處理
5、中斷嵌套:
RT-Thread - 允許
uCOS - 允許
6、源碼許可證:
RT-Thread - 遵循GPLv2+許可證。羨亂族可用於商業產品(只需要註明使用了RT-Thread)
uCOS - 商業收費
Ⅵ 求個按鍵精靈多線程的源碼
Dimenvi,缺早n
n=0
Randomize
Fori=97To105
線程ID=BeginThread(按鍵)
Delay100
Next
Do
LoopUntiln>=1000
ExitScript
Sub按鍵
a=i
Do
KeyPressa,1
n=n+1
神滲伏瞎雀Loop
EndSub
Ⅶ iOS詳解多線程(實現篇——pThread)
上一節中,我們探究了OC中重要的實現多線程的方法——NSOperation。本節中,我們了解一下不常用的一種創建多線程的方式——pThread。
相關鏈接:
NSOpreation鏈接: iOS詳解多線程(實現篇——NSOperation)
GCD鏈接: iOS詳解多線程(實現篇——GCD)
NSThread鏈接: 詳解多線程(實扒派現篇——NSThread)
多線程概念篇鏈接: 詳解多線程(概念篇——進程、線程以及多線程原理)
源碼鏈接: https://github.com/weiman152/Multithreading.git
1.NSThread(OC)
2.GCD(C語言)
3.NSOperation(OC)
5.其他實現多線程方法
pThread並不是OC特有的實現多線程的方肢鍵法,而是Unix、Linux還有Windows都通用的一種實現多線程的方式。
pThread的全稱是POSIX threads,是線程的 POSIX 標准。
pThread是C語言的,在iOS的開發中極少使用。
使用之前,記得先導入頭文件
運行結果:
從結果可以看出,開啟了新的線程,執行任務。
pthread_create() 創建一個線程
pthread_exit() 終止當前線程
pthread_cancel() 中斷另外一個線程的運行
pthread_join() 阻塞當前的線程,直到另外一個線程運行結束
pthread_attr_init() 初始化線程的屬性
pthread_attr_setdetachstate() 設置脫離狀態的屬性(決定這個線程在終歷此巧止時是否可以被結合)
pthread_attr_getdetachstate() 獲取脫離狀態的屬性
pthread_attr_destroy() 刪除線程的屬性
pthread_kill() 向線程發送一個信號
由於pThread我們基本用不到,所以不再做深入研究。
Ⅷ 什麼是java多線程編程
一、 什麼是多線程:
我們現在所使用操作系統都是多任務操作系統(早期使用的DOS操作系統為單任務操作系統),多任務操作指在同一時刻可以同時做多件事(可以同時執行多個程序)。
多進程:每個程序都是一個進程,在操作系統中可以同時執行多個程序,多進程的目的是為了有效的使用CPU資源,每開一個進程系統要為該進程分配相關的系統資源(內存資源)
多線程:線程是進程內部比進程更小的執行單元(執行流|程序片段),每個線程完成一個任務,每個進程內部包含了多個線程每個線程做自己的事情,在進程中的所有線程共享該進程的資源;
主線程:在進程中至少存在一個主線程,其他子線程都由主線程開啟,主線程不一定在其他線程結束後結束,有可能在其他線程結束前結束。Java中的主線程是main線程,是Java的main函數;
二、 Java中實現多線程的方式:
繼承Thread類來實現多線程:
當我們自定義的類繼承Thread類後,該類就為一個線程類,該類為一個獨立的執行單元,線程代碼必須編寫在run()方法中,run方法是由Thread類定義,我們自己寫的線程類必須重寫run方法。
run方法中定義的代碼為線程代碼,但run方法不能直接調用,如果直接調用並沒有開啟新的線程而是將run方法交給調用的線程執行
要開啟新的線程需要調用Thread類的start()方法,該方法自動開啟一個新的線程並自動執行run方法中的內容
java多線程的啟動順序不一定是線程執行的順序,各個線程之間是搶佔CPU資源執行的,所有有可能出現與啟動順序不一致的情況。
CPU的調用策略:
如何使用CPU資源是由操作系統來決定的,但操作系統只能決定CPU的使用策略不能控制實際獲得CPU執行權的程序。
線程執行有兩種方式:
1.搶占式:
目前PC機中使用最多的一種方式,線程搶佔CPU的執行權,當一個線程搶到CPU的資源後並不是一直執行到此線程執行結束,而是執行一個時間片後讓出CPU資源,此時同其他線程再次搶佔CPU資源獲得執行權。
2.輪循式;
每個線程執行固定的時間片後讓出CPU資源,以此循環執行每個線程執行相同的時間片後讓出CPU資源交給下一個線程執行。
希望對您有所幫助!~
Ⅸ 請高手幫忙解釋下這多線程的源代碼,每句注釋下 #include <stdio.h> #include <stdlib.h>
首先這是一個生產者和消費者問題。
生產者procer負責產生數據,然後通過put操作將數據放到緩沖區buf中。
消費者consumer負責顯示數據,通過get操作從緩沖區buf中讀取數據。
========》
先看主函數main(),
生產者和消費者分別用兩個線程來實現。
主函數中的pthread_create()函數就是用來創建這兩個線程的。
開始定義了兩個變數th_a,th_b用來記錄這兩個線程的線程號。
線程的程序體分別是procer,consumer。
接下來的pthread_join用來等待兩個線程結束。因為如果不等待,main函數的主線程會立即結束,而兩個子線程還來不及完全執行。
=======》
下面來分別看procer,consumer這兩個線程。
procer循環一百次,每次調用put往buffer中放數據,最後放一個OVER;
consumer循環用get從buffer中讀到數據並列印,直到讀取的數據位OVER數據時結束。
=======》
我們再分別來看put操作和get操作。
由於put和get都要訪問buf,buf就是一個臨界資源,為了解決這個臨界資源,在使用buf之前,要對它加鎖。
pthread_mutex_lock(b->lock)一個為信號量加鎖的函數。每個信號量只能加鎖一次(我說的可能不準確),如果執行該函數的時候,參數中的信號量已經被加鎖,則該函數阻塞,直到信號量被解鎖才繼續執行。這樣就能保證信號量所保護的臨界資源能夠被互斥的訪問。
structprodcons{
intbuffer[BUFFER_SIZE];/*這個就是循環緩沖區*/
pthread_mutex_tlock;/*這個是信號量,用來保證對緩沖區的互斥訪問*/
intreadpos,writepos;/*這兩個成員分別表示讀位置和寫位置*/
pthread_cond_tnotempty;/*這是表示緩沖區「非空」的條件信號量*/
pthread_cond_tnotfull;/*這是表示緩沖區「非滿」的條件信號量*/
};
buf是一個循環的緩沖區,我們先來看緩沖區為空和滿這兩種狀態時,讀、寫標記(readpos,writepos)的位置。
緩沖區為空時,readpos和writepos指在同一位置;
換從去為滿時,writepos位置的下一個位置就是readpos。
/*put負責把數據放到緩沖區*/
voidput(structprodcons*b,intdata)
{
//首先對互斥信號量進行加鎖
pthread_mutex_lock(&b->lock);
/*這里就是判斷緩沖區有沒有滿,用writepos+1與readpos比較,可以參考附圖。
*因為是循環緩沖區,所以要模BUFFER_SIZE。
*如果緩沖區滿,將在while中等待,直到緩沖區非滿,再繼續執行。
*/
while((b->writepos+1)%BUFFER_SIZE==b->readpos){
printf("waitfornotfull ");
//如果已經滿了,則等待消費者讀取了數據後發出「非滿」信號。
pthread_cond_wait(&b->notfull,&b->lock);
}
/*當緩沖區非滿時,將數據寫入緩沖區中writepos對應的位置*/
b->buffer[b->writepos]=data;
//更新writepos到下一個位置
b->writepos++;
//循環利用緩沖區空間,如果超過了最大值,則從頭開始。
if(b->writepos>=BUFFER_SIZE)b->writepos=0;
/*向消費者發送信號,告訴消費者緩沖取非空*/
pthread_cond_signal(&b->notempty);
//對互斥信號進行解鎖。
pthread_mutex_unlock(&b->lock);
}
/*--------------------------------------------------------*/
/*get負責從緩沖區中讀取數據*/
intget(structprodcons*b)
{
intdata;
//對互斥信號量進行加鎖
pthread_mutex_lock(&b->lock);
/*判斷緩沖區是否為空,為空則等待*/
while(b->writepos==b->readpos){
printf("waitfornotempty ");
pthread_cond_wait(&b->notempty,&b->lock);
}
/*讀取readpos位置的數據*/
data=b->buffer[b->readpos];
//更新readpos到下一個位置。
b->readpos++;
//循環利用緩沖區,回撥指針
if(b->readpos>=BUFFER_SIZE)b->readpos=0;
/*發信號給生產者,緩沖區非滿,可以放數據了*/
pthread_cond_signal(&b->notfull);
//對互斥信號量進行解鎖
pthread_mutex_unlock(&b->lock);
returndata;
}
Ⅹ 易語言,有源碼,幫忙弄下,多線程怎麼一直處理下去,我只能處理十個線程
很容易,把代碼中的10改成你想的執行次數就可以,有問題請追問