如何在Windows下编写基于Posix标准的多线程程序

如何在Windows下编写基于Posix标准的多线程程序,第1张

在Windows下编写基于Posix标准的多线程程序方法

1、进入pthread-win32开源库官网,单击pthread-win32-2-9-1-releasezip进行下载

2、下载后的文件解压缩后,进行二次开发只需要里面的Pre-built2文件夹里面的内容

Pre-built2文件夹下面有:dll(程序运行时需要的动态运行时库),

include(程序编写时利用的头文件),

lib(程序连接过程中需要的静态库)

3、建立code

blocks下的C工程,工程结构,包括mainc测试代码

codeblocks的工程配置,右键工程名选择build

options,配置linker

settings,与search

direction里面的compiler选项

编写mainc,代码如下:

#include

"pthreadh"#include

<stdioh>void

func(void

Parame){

printf("I

am

Child

Thread\n");

return

NULL;}int

main(){

printf("Pthread

Test

Begin\n");

pthread_t

pid;

pthread_attr_t

attr;

pthread_attr_init(&attr);

pthread_attr_setscope(&attr,

PTHREAD_SCOPE_PROCESS);

pthread_attr_setdetachstate(&attr,

PTHREAD_CREATE_DETACHED);

pthread_create(&pid,

&attr,

func,

NULL);

getchar();

pthread_attr_destroy(&attr);

return

0;}

在生成的exe文件所在同级目录下应该自己添加前文所说的dll文件,否则无法运行。

将你编译好的EXE文件(如aexe)copy到电脑的目录下如c:\aexe

开始->运行->cmd

在命令行中输入cd c:\

c:\>

c:\>aexe

aexe程序就运行起来了。

仔细看下这个头文件inputh 和结构体 input_event 的描述吧,对你应该有帮助;

/

The event structure itself

/

struct input_event {

struct timeval time;

__u16 type;

__u16 code;

__s32 value;

};

里面有关于type、code、value值的介绍;

理解这个之后,你就明白什么时候代表按下鼠标左键,什么时候松开鼠标左键,什么时候按下鼠标右键、什么时候松开鼠标右键;

/

Event types

/

#define EV_KEY 0x01

/

Keys and buttons , code values

/

#define BTN_MOUSE 0x110

#define BTN_LEFT 0x110

#define BTN_RIGHT 0x111

#define BTN_MIDDLE 0x112

#define BTN_SIDE 0x113

#define BTN_EXTRA 0x114

#define BTN_FORWARD 0x115

#define BTN_BACK 0x116

#define BTN_TASK 0x117

java 程序是一次编写,处处运行的.

但实际情况是 一次编写,处处编译.

使用Java语言编写应用程序最大的优点在于“一次编译,处处运行”,然而这并不是说所有的Java程序都具有跨平台的特性,事实上,相当一部分的Java程序是不能在别的 *** 作系统上正确运行的.

下面是在编写跨平台的Java程序是需要注意的一些事情:

1.编写Java跨平台应用程序时,你可以选择JDK10,11,12或支持它们的GUI开发工具如:Jbuilder,Visual Age for Java 等等,但是必须注意你的Java程序只能使用Java核心API包,如果要使用第三方的类库包,则该类库包也要由Java核心包开发完成,否则在发布你的程序的时候还得将支持该Java类库包的JVM发布出去。也就是说,你的程序需要是100%纯Java的。举一个例子,Visual J++ 就不是纯Java的,由Visual J++编写的程序也就不具有平台无关性。

2. 无论你使用的是JDK或其他开发工具,在编译时都要打开所有的警告选项,这样编译器可以尽可能多的发现平台相关的语句,并给出警告。虽然不能保证没有编译时警告错误的程序一定是跨平台的,但含有警告错误的程序却很有可能是非平台无关的。

3. 在程序中使用任何一个方法的时候,要详细察看文档,确保你使用的方法不是在文档中已经申明为过时的方法(Deprecated method),也不是文档中未标明的隐含方法(Undocumented method)。

4.退出Java程序时尽量不要使用javalangSystem的exit方法。Exit 方法可以终止JVM,从而终止程序,但如果同时运行了另一个Java程序,使用exit方法就会让该程序也关闭,这显然不是我们希望看到的情况。事实上要退出Java程序,可以使用destory()退出一个独立运行的过程。对于多线程程序,必须要关闭各个非守护线程。只有在程序非正常退出时,才使用 exit方法退出程序。

5. 避免使用本地方法和本地代码,尽可能自己编写具有相应功能的Java类,改写该方法。如果一定要使用该本地方法,可以编写一个服务器程序调用该方法,然后将现在要编写的程序作为该服务器程序的客户程序,或者考虑CORBA(公共对象请求代理)程序结构。

6. Java中有一个类似于Delphi中的winexec的方法,javalangruntime类的exec方法,作为该方法本身是具有平台无关性的,但是给方法所调用的命令及命令参数却是与平台相关的,因此,在编写程序时要避免使用,如果一定要调用其他的程序的话,必须要让用户自己来设置该命令及其参数。比如说,在windows中可以调用notepadexe程序,在linux 中就要调用vi程序了。

7. 程序设计中的所有的信息都要使用ASCII码字符集,因为并不是所有的 *** 作系统都支持Unicode字符集,这对于跨平台的Java中文软件程序不能不说是一大噩耗。

8.在程序中不要硬性编码与平台相关的任何常量,比如行分隔符,文件分隔符,路径分隔符等等,这些常量在不同的平台上是不同的,比如文件分隔符,在UNIX和 MAC中是“/”,在windows中是“\”,如果要使用这些常量,需要使用javaioFile 类 如获得文件分隔符Fileseparator, 获得路径分隔符:FilepathSeparator;举例:myPath + Fileseparator+myFileName//跨平台、可移植性好

9.在编写跨平台的网络程序时,不要使用javanetInetAddress类的getHostName方法得到主机名,因为不同的平台的主机名格式是不同的,最好使用getAddress得到格式相同的IP地址,另外,程序中所有的主机名都要换成IP地址,比如>

是用swing和awt包下的类库就可以做出windows窗体程序,最简单的,创建一个窗体的代码Frame f = new Frame();//创建窗体fsetSize(100,100);//设置窗体大小fsetVisible(true);//显示窗体先试着跑一下,体会一下。多看看这些属性有什么用,你会发现窗口无法关闭,这个涉及到java的事件模型, frameaddWindowListener(new javaawteventWindowListener() { public void windowClosing(WindowEvent e) {Systemexit(0);}});加上这个代码就行了。书的话,建议你看《java程序设计教程》,如果有能力,可以看《java编程思想》。至于你说的那个语言做windows程序好,这里的建议是,如果仅仅限制在界面,做简单的功能,C#很方便。用java易于理解界面的事件模型,C,C++用的是windowAPI最强大,却比较难。

以上就是关于如何在Windows下编写基于Posix标准的多线程程序全部的内容,包括:如何在Windows下编写基于Posix标准的多线程程序、在编译器下编好c/c++程序后怎么让其执行功能,也就是说在没装编译器的电脑上执行、在linux下编c语言的程序,我想判断鼠标的按键状态,该怎么写程序啊HELP啊!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9660271.html

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

发表评论

登录后才能评论

评论列表(0条)

保存