导航:首页 > 文件教程 > 多线程读一个文件

多线程读一个文件

发布时间: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线程读取吗

可以。但是由于机械磁盘只能同时一个线程访问,所以多线程的读取效率可能还不如单线程。

阅读全文

与多线程读一个文件相关的资料

热点内容
iphone霸气壁纸 浏览:32
系统文件备份在哪个文件夹 浏览:53
win81升级win10卡住 浏览:766
jsp调用微信公众号支付 浏览:767
微信模板消息推送java 浏览:519
传700MB的文件要多少流量 浏览:777
想做家教可以在哪些app上 浏览:868
5s怎么升级到84 浏览:862
什么编程语言适合windows 浏览:982
迷你世界编程器如何使用 浏览:871
财税201215号文件代码 浏览:456
win1064位sp1 浏览:118
6S微信老出现半截屏幕 浏览:457
安卓手机怎么传送文件 浏览:541
苹果6S47不想要了换多少钱 浏览:615
ipadair2如何关闭程序 浏览:130
win10驱动安装预安装 浏览:78
iphone越狱系统文件 浏览:959
gg为什么有些数据冻结不了 浏览:6
桌面文件删了c盘里还有吗 浏览:959

友情链接