[高分,急]C语言,如何实现多线程,有具体方案,请提供!

C语言如何实现多线程同时运行~

1、点击菜单栏的“Project”选项卡,下拉列表的最后一项“Project options...”是对当前工程的的属性进行设置的。

2、选择弹出对话框中的“Compiler”选项卡。

3、将其中的“Runtime Library”的选择改为“Multithreaded (LIB)”。

4、将看到对话框最下面的文本框中发生了一些变化,新增了“-MT”选项,这与编译器一开始所报的错误提示给出的解决方案一致。

5、页面的设置完成后,再对该源码进行编译时,就能愉快地看到编译完全成功。

package cn.sdeit.file;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.util.Scanner;public class ReadTxt{private int id;public String getArticle(String path,int id){String url = path+id+".txt";String string = "";String allString = "";File file=new File(url);try{BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"utf-8"));while((string=reader.readLine())!=null){allString += string+"
";}} catch (FileNotFoundException e){e.printStackTrace();} catch (IOException e){e.printStackTrace();}return allString;}}

你这个问题可是超过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可以通过时间片轮循的方式进行多任务实现

暂时就想到这么多,有不明白的通过消息进一步交流吧:)

这是Windows上的实现,主要是使用
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, // 安全属性指针
SIZE_T dwStackSize, // 初始堆栈大小
LPTHREAD_START_ROUTINE lpStartAddress, // 线程函数
LPVOID lpParameter, // 线程参数
DWORD dwCreationFlags, // 创建选项
LPDWORD lpThreadId // 线程标识符
);
函数,示例代码如下:
#include <windows.h> //包含了CreateThread函数的声明
#include <conio.h> //控制台相关输入输出函数的声明

DWORD WINAPI ThreadFunc( LPVOID lpParam ) //新线程将从这里开始执行
{
char szMsg[80];
//以下语句是在另一个线程中执行的,因此并不会因为主线程
//main函数的_getch()而挂起
wsprintf( szMsg, "Parameter = %d.", *(DWORD*)lpParam );
MessageBox( NULL, szMsg, "ThreadFunc", MB_OK );

return 0;
}

VOID main( VOID )
{
DWORD dwThreadId, dwThrdParam = 1;
HANDLE hThread;
char szMsg[80];

hThread = CreateThread(
NULL, // 安全属性为空
0, // 使用默认堆栈大小
ThreadFunc, // 在main之前声明的线程入口
&dwThrdParam, // ThreadFunc函数的参数
0, // 使用默认线程创建标志
&dwThreadId); // 该线程的标识符将储存于dwThreadId中

// 根据CreateThread的返回值判断线程创建是否成功.

if (hThread == NULL)
{
wsprintf( szMsg, "CreateThread failed." );
MessageBox( NULL, szMsg, "main", MB_OK );
}
else
{
_getch();//主线程暂停在此处,直到用户有输入动作
CloseHandle( hThread ); //主线程执行到此处,关闭子线程句柄
}
}

_beginthread,_beginthreadex
千万不要用CreateThread,你会后悔的

不懂

如果想在c语言中使用数组,该如何实现呢?
答:答:int i=0;for(i=0;i<n;i++)if(arr[i]%5==0)if(arr[i]<m)m=arr[i];

急!用c语言实现链栈的操作
答:free (p); /*释放原栈顶结点*/ return 1; /*返回新栈顶指针*/ } (5) 取栈顶元素 int GetLinkStackTop (LinkStack* s, ElemType &x){ if(s==NULL) return 0;x = s->data; /*将栈顶数据存入*x */ return 1; /*返回新栈顶指针*/ } 主函数怎么写吧 ...

c语言编写程序如何实现输入1 2,会输出3 4 5……,输入1 3,输出5 7 9...
答:include<stdio.h>int main(){int a,b,i;scanf("%d%d",&a,&b);b-=a;for(i=a;i

用C语言如何实现以下功能程序。
答:根据你的要求,只要将以下代码写入程序即可实现你说的功能,具体如下:include <stdio.h> include <stdlib.h> include <malloc.h> define LIST_INIT_SIZE 20 define LISTINCREMENT 10 struct myList { int elem;int length;int listsize;};int InitList(myList&L){ L.elem=(int*)malloc(LIST_...

急求C语言编程:求1到100所有偶数之和,三种循环语句分别实现
答:工具/材料:以Microsoft Visual Studio 2010为例。1、首先在桌面上,点击“Microsoft Visual Studio 2010”图标。2、然后在该界面中,输入到100所有偶数之和的for循环语句“int sum,i; for(i=1;i<=100;i++){if(i%2==0) {sum = sum+i;}printf ("%d\n",sum);}”。3、之后在该界面中...

c语言 if()函数式如何实现的?
答:if语句的一般形式如下:if(表达式)语句1 [else语句2]if语句中的“表达式”可以是关系表达式、逻辑表达式,甚至是数值表达式。其中最直观、最容易理解的是关系表达式。所谓关系表达式就是两个数值进行比较的式子。例如:if(x>y)printf("%d",x);else printf("%d",y);...

如何在C语言中实现int add()函数。
答:C语言(C++/C#直接可用):int add(int NumberA, int NumberB){ return (int)(NumberA + NumberB);} 使用注意事项:首先,此函数是接受两个int型的变量,但是两个int型的变量做和可能会导致溢出而不会得到想要的结果;还有,注意此函数的类型,可能不是你想要的类型,改成自己想要的类型即可;要...

C语言如何实现,,,?
答:include <stdio.h>#include <stdlib.h>void getArea(double w,double h){printf("长方形面积是:%.2lf\n",w*h); printf("长方形周长是:%.2lf\n",2*(w+h));}int main(){double a,b; printf("请输入长:"); scanf("%lf",&a); printf("请输入宽:"); scanf("%lf",&b);...

C语言如何实现判断用户输入的算式结果正确?
答:将用户输入的算式存在字符串中,然后将字符串中的字符转换成对应的数字和符号,自己算一遍。如果对,则告诉用户对,如果错,则告诉用户错。

C语言输入输出操作由什么实现的
答:C语言本身没有输入输出的关键字,它的所有输入输出都是依靠标准函数库stdio实现。在使用标准函数库中的输入输出函数时,编译系统要求程序提供有关的信息(例如对这些输入输出函数的声明),#include<stdio.h>的作用就是用来提供这些信息的,stdio.h是C编译系统提供的一个文件名,stdio是“standard input &...

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网