導航:首頁 > 文件教程 > 多線程讀一個文件

多線程讀一個文件

發布時間:2025-01-07 18:36:00

① 按鍵精靈 如何用多線程對同一文件進行讀寫【解決問題後追加100分】

線程ID1 = BeginThread(主腳本抄)
Delay 500
線程ID2 = BeginThread(監視血)
Sub 主腳本()
Do
'主腳本操作
Loop
End Sub
Sub 監視血()
Do
//
//添加無限判斷的表達式
PauseThread 線程ID1//暫停主線程操作
'進入你說的發現問題向excel裡面寫入數據
//
Text = Plugin.Office.ReadXls(1, 1, 2)
Else
ContinueThread 線程ID1//繼續主線程操作
End If
Loop
End Sub
提個思路。看懂後採納!

② 使用多線程讀取一個超大文件(比如1TB) 並將結果保存到Mysql資料庫

設n個線程同時工作,
把文件份成n份,從n份的起始位置開始讀,讀一部分保存一部分。地n+1個線程讀剩餘的文件並保存。

java多線程如何分段讀取文件

1,讀取文件大小(比如大小是200K)。
2,啟動5個線程,第一個線程從其實讀,第二個線程跳過40在讀40。。。

④ 多線程讀取同一個文件,怎樣判斷文件已經被讀取完

你把原來程序中直接讀的地方,改成調用上面的函數,由該函數統一讀行。這樣,不管是你有回 N 個線答程,還是一個線程,都不會發生讀的行重復,或者讀的行不完整的現象了。
為了充分利用多線程讀取,就需要把文件劃分成多個區域,供每個線程讀取。那麼就需要有一個演算法來計算出每個線程讀取的開始位置和結束位置。那麼首先根據配置的線程數和文件的總長度計,算出每個線程平均分配的讀取長度。
但是有一點,由於文件是純文本文件,必須按行來處理,如果分割點在某一行中間,那麼這一行數據就會被分成兩部分,分別由兩個線程同時處理,這種情況是不能出現的。所以各個區域的結束點上的字元必須是換行符。第一個區域的開始位置是0,結束位置首先設為(文件長度/線程數),如果結束點位置不是換行符,就只能加1,直到是換行符位置。
如果多線程操作,那麼需要保證多個線程操作同一個對象,此外請保證先有線程放進內容,其他線程才能拿出數據。

⑤ 多線程可以同時並行讀寫一個文件嗎

可以同時調用操作系統API來讀寫文件,操作系統內核內部會自動進行同步。

⑥ C# 多線程同步訪問一個文件怎麼處理

同時讀寫文件來是不安全也不必自要的,讀寫文件的主要制約條件是存儲介質的讀寫速度,即使使用多線程,也不可能提高讀寫效率。
所以,只能理解你的要求是想要在多個線程上「不同時」操作一個文件。這種情況下,一般的建議是使用一個臨界區對象(網路一下很多很多),然後維護一個隊列,按順序處理各個線程的讀寫要求。如果嫌麻煩的話,可以使用.Net託管的文件流中的Begin系列非同步讀寫函數(BeginRead,BeginWrite....網路一下還是很多很多),就不會阻塞各個線程,也不會造成意料之外的文件讀寫混亂了....
順便補充說明,一個文件只需要一個FileStream來維護。可以認為文件流就是文件的一個抽象介面...

⑦ 在Linux環境下,對一個設備文件進行多線程讀寫(兩個線程就行),求大神給一個簡單的程序。

配置文件為 conf.txt
測試代碼如下,注意鏈接的時候加上 -lpthread 這個參數

#include <stdio.h>
#include <errno.h> //perror()
#include <pthread.h>

#include <unistd.h> //sleep()
#include <time.h> // time()
#include <stdlib.h> //rand()

#define FD "conf.txt"

typedef void *(*fun)(void *);

struct my_struct
{
unsigned time_to_wait;
int n;
};

void *test_thread(struct my_struct *);

int main (int argc, char const *argv[])
{
FILE *fp = fopen(FD, "r");
if (fp == NULL)
{
perror(FD);
return -1;
}

srand((unsigned)time(NULL)); //初始化隨機種子

int thread_count;
fscanf(fp, "%d", &thread_count);
fclose(fp);

if (thread_count <= 0)
{
printf("線程數<1,退出程序。\n");
return -1;
}

pthread_t *ptid = (pthread_t *)malloc(sizeof(pthread_t) * thread_count); //保存線程ID

int i;
for (i = 0; i < thread_count; i++)
{
int tw = rand() % thread_count + 1; //隨機等待時間

struct my_struct * p = (struct my_struct *)malloc(sizeof(struct my_struct));
if (p == NULL)
{
perror("內存分配錯誤");
goto ERROR;
}
p->time_to_wait = tw;
p->n = i + 1;

int rval = pthread_create(ptid + i, NULL, (fun) test_thread, (void *)(p)); //注意這里的強制轉換(兩個)
if (rval != 0)
{
perror("Thread creation failed");
goto ERROR;
}
//sleep(1); //這句加也可以,不加也可以。最開始的時候加上這個是為了讓兩個線程啟動的時候之間有一定的時間差
}

printf("主線程啟動\n\n");
fflush(stdout);
for (i = 0; i < thread_count; i++)
{
pthread_join(*(ptid + i), NULL); //等待所有線程退出。
}
printf("\n主線程退出\n");
ERROR:
free(ptid);
return 0;
}

void *test_thread(struct my_struct * p) //線程啟動的時候運行的函數
{
printf("第%d個線程啟動,預計運行%d秒\n", p->n, p->time_to_wait);
fflush(stdout);

sleep(p->time_to_wait); //讓線程等待一段時間
printf("第%d個線程結束\n", p->n);
fflush(stdout);
free(p);
return NULL;
}

你的第二個問題我在網路HI回你了~

⑧ 一個文件能同時被多個java線程讀取嗎

可以。但是由於機械磁碟只能同時一個線程訪問,所以多線程的讀取效率可能還不如單線程。

閱讀全文

與多線程讀一個文件相關的資料

熱點內容
金蝶kis支持win10嗎 瀏覽:113
常州採集物聯網大數據平台有哪些 瀏覽:950
win10休眠文件改到d盤 瀏覽:626
如何編程手機app軟體 瀏覽:656
node獲取文件名 瀏覽:367
iphoneios7怎麼設置鈴聲 瀏覽:52
手機qq激活星鑽 瀏覽:302
html中引入js文件路徑 瀏覽:83
0基礎自學編程可以看什麼書 瀏覽:860
javapoi導出excel 瀏覽:212
迷你編程迷小酷為什麼郵箱里沒有 瀏覽:33
ipadqq接收的文件在哪裡 瀏覽:15
拼多多初級看哪些數據 瀏覽:848
win10開機密碼屏幕鍵盤 瀏覽:162
文件夾樂高 瀏覽:914
外置文件夾掛載 瀏覽:304
人人視頻本地緩存文件 瀏覽:194
java俄羅斯方塊項目描述 瀏覽:354
win10系統被凍結 瀏覽:460
excel文件批量合並 瀏覽:948

友情鏈接