本文目录一览:
- 1、[高分,急]C语言,如何实现多线程,有具体方案,请提供!
- 2、c语言如何才能后台下载文件,比如有一个文件www.jjjjj.com/a.zip。怎样才能用c语言
- 3、C语言多线程实现
- 4、百度网盘多线程下载,容易理解的,本人不会c语言c++等
[高分,急]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可以通过时间片轮循的方式进行多任务实现
暂时就想到这么多,有不明白的通过消息进一步交流吧:)
c语言如何才能后台下载文件,比如有一个文件www.jjjjj.com/a.zip。怎样才能用c语言
这绝不仅仅靠C语言能够做到,需要配合操作系统提供的多线程编程。简单说下思路吧:
主线程由于控制主程序,并且可以显示下载进度;子线程用于做文件的下载,并且要每隔一段时间与主线程通信,把进度汇报给主线程。
至于线程的控制、以及文件的下载(涉及到所采用的网络通信协议),需要结合你所使用的操作系统提供的API了。
C语言多线程实现
多线程随机选号程序
以下程序运行后看起来比较有意思,像一个随机选号程序,但不是完全按照问题所说的写的 可供参考,要改很容易
//多线程随机选号程序示例
#include stdio.h
#include Windows.h
#include ctime
#include cstdlib
#include process.h
bool g_run = true; //是否运行
void userInput(void*) //监视输入的线程函数
{
while (true)
{
if (getchar()=='\n') //是否输入回车
{
g_run = !g_run; //回车运行 回车暂停
}
Sleep(10); //延迟
}
}
int main()
{
srand(time(0)); //随机数种子
_beginthread(userInput,0,NULL); //开线程
while (true)
{
if (g_run)
{
system("cls"); //清屏
int t = rand() % 1000+ 1;//1-1000的随机数
printf("\n %d",t); //输出
}
Sleep(50); //延迟50毫秒
}
return 0;
}
百度网盘多线程下载,容易理解的,本人不会c语言c++等
线程可以理解为下载的通道,一个线程就是一个文件的下载通道,多线程也就是同时开起好几个下载通道.当服务器提供下载服务时,使用下载者是共享带宽的,在优先级相同的情况下,总服务器会对总下载线程进行平均分配。不难理解,如果你线程多的话,那下载的越快。现流行的下载软件都支持多线程。
多线程下载的原理是这样的:通常服务器同时与多个用户连接,用户之间共享带宽。如果N个用户的优先级都相同,那么每个用户连接到该服务器上的实际带宽就是服务器带宽的N分之一。可以想象,如果用户数目较多,则每个用户只能占有可怜的一点带宽,下载将会是个漫长的过程。