Ⅰ 求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改成你想的执行次数就可以,有问题请追问