linux 线程里面创建线程吗

linux 线程里面创建线程吗,第1张

1、windows里的进程/线程是继承自OS/2的。在windows里,"进程"是指一个程序,而"线程"是一个"进程"里的一个执行"线索"。从核心上讲,windows的多进程与Linux并无多大的区别,在windows里的线程才相当于Linux的进程,是一个实际正在执行的代码。但是,windows里同一个进程里各个线程之间是共享数据段的。这才是与Linux的进程最大的不同。2、在windows下,使用CreateThread函数创建线程,与Linux下创建进程同,windows线程不是从创建处开始运行的,而是由CreateThread指定一个函数,线程就从那个函数处开始运行。此程序同前面的UNIX程序一样,由两个线程各打印1000条信息。threadID是子线程的线程号,另外,全局变量g是子线程与父线程共享的,这就是与Linux最大的不同之处。大家可以看出,windows的进程/线程要比Linux复杂,在Linux要实现类似windows的线程并不难,只要fork以后,让子进程调用ThreadProc函数,并且为全局变量开设共享数据区就行了,但在windows下就无法实现类似fork的功能了。所以现在windows下的C语言编译器所提供的库函数虽然已经能兼容大多数Linux/UNIX的库函数,但却仍无法实现fork。3、对于多任务系统,共享数据区是必要的,但也是一个容易引起混乱的问题,windows下,一个程序员很容易忘记线程之间的数据是共享的这一情况,一个线程修改过一个变量后,另一个线程却又修改了它,结果引起程序出问题。但在Linux下,由于变量本来并不共享,而由程序员来显式地指定要共享的数据,使程序变得更清晰与安全。

通过多进程来实现,用这两个命令:

调用格式: 〈逻辑型〉 启动线程 (子程序指针 欲执行的子程序,[整数型 参数数据],[整数型变量 线程句柄]) - 多线程支持库->多线程控制

英文名称:CreateThread

创建并启动一条线程,可重复使用以创建多条线程,成功返回真,失败返回假。本命令为初级命令。

参数<1>的名称为“欲执行的子程序”,类型为“子程序指针(SubPtr)”。本参数提供创建线程时欲启动的子程序,根据是否需要传递参数数据,该子程序必须没有或具有一个整数型参数,否则将出错。

参数<2>的名称为“参数数据”,类型为“整数型(int)”,可以被省略。本参数提供线程被启动时传递到欲启动子程序的整数数据。如果本参数未被省略,此时被启动子程序必须接收一个整数型参数,否则将出错。

参数<3>的名称为“线程句柄”,类型为“整数型(int)”,可以被省略,提供参数数据时只能提供变量。如果提供了本参数,将向参数变量写入线程句柄(Windows下为HANDLE,Linux下为pthread_t),请在适当的时机关闭该句柄。如果不提供本参数接收线程句柄,内部将自动处理线程句柄。

*** 作系统需求: Windows、Linux

————————————————————————————————————————

调用格式: 〈逻辑型〉 关闭线程句柄 (整数型 线程句柄) - 多线程支持库->多线程控制

英文名称:CloseThreadHandle

返回真表示已成功关闭线程句柄。在Linux下,如果线程已经结束,本命令可能返回假。本命令为初级命令。

参数<1>的名称为“线程句柄”,类型为“整数型(int)”。可通过“启动线程”的第三个参数获取线程句柄。

*** 作系统需求: Windows、Linux

======================================================================

按F1关闭线程,要注册热键:

调用格式: 〈整数型〉 注册热键 (整数型 窗口句柄,整数型 标签句柄,整数型 功能键,整数型 主热键) - 扩展功能支持库一->热键功能

英文名称:RegHotKey

注册系统热键,返回一个热键标识,失败返回0。本命令为初级命令。

参数<1>的名称为“窗口句柄”,类型为“整数型(int)”。窗口句柄。

参数<2>的名称为“标签句柄”,类型为“整数型(int)”。使用标签的反馈事件来接受热键,反馈事件中的第一个参数为热键标识,第二个参数无效。

参数<3>的名称为“功能键”,类型为“整数型(int)”,初始值为“0”。可以为:0-无功能键;1-CTRL键状态;2-SHIFT键状态;4-ALT键状态或各键状态值之和。

参数<4>的名称为“主热键”,类型为“整数型(int)”。键代码,可以使用易语言中的键代码常量。

*** 作系统需求: Windows

这代码是不是从linux平台上直接复制过来的?因为windows平台的64位大整数用的一个关键字__int64,而使用unsigned long long的好像是Linux .

其次,你的线程函数,在Windows平台上是如下的函数原型格式 :

DWORD ThreadFuncName(arg list) //线程函数的返回值不对

再次,我没有编译通过~_~ 可能是编程环境的事,因为一直用的vc6.0 还么有vs...不过,那个传递给线程函数的参数 x1 x2 你得改一下。。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7127073.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-01
下一篇 2023-04-01

发表评论

登录后才能评论

评论列表(0条)

保存