Search found 21 matches

by spritez
Tue May 27, 2008 1:31 am
Forum: wxWidgets Development (Chinese)
Topic: 写多线程程序,线程之间共用的变量是不是要
Replies: 4
Views: 3846

互斥访问太麻烦了吧? 我的多线程程序一般是这样:一个线程给全局变量赋值,另一个线程去读这些变量的值,也就是说:一个线程去写,一个线程去读。并没有发生双线程又读又写的情况。这种情况下不用互斥吧? (我写的一个数据采集程序就是这样子的,主线程置一些标志变量,比如滤波器类型,而采集线程则仅仅去检测这些标志变量) 如果只有两个线程一读一写,并且在一个比较简单的CPU上运行的话,只要你自己维护好原则上也是可以的,因为,使用操作系统实际上是直接使用函数库或系统提供的现成的方式来维护临界区变量。自己维护也可,本质上是一样的,不同的是谁来做这段代码。 但是,请考虑一下,现在电脑中的CPU是非常复杂的,其中有...
by spritez
Mon May 26, 2008 1:02 pm
Forum: wxWidgets Development (Chinese)
Topic: 大家好,请问编译后不要mingwm10.dll的方式?
Replies: 10
Views: 4133

这算是解决了? 我用CB编译完后,都是在另一个没有安装过MinGW的系统中运行的。确定是可以正常运行的。另外,我也使用了-static-libgcc参数。当然,还是不行。 不过,我在网上搜索的时候,有几篇关于MingW+QT的开发环境设置中提到要去掉-mthreads参数来达到不依赖mingwm10.dll文件,开始我没太在意,因为我用的不是Qt,再者我已经使用多线程,所以我觉得不能去掉-mthreads参数,但刚才我试了一下去掉了编译和连接中的-mthreads参数,居然编译过了,而且可以不依赖mingwm10.dll文件运行了?????!!!!! 难道这就是解决方案?! 进一步的测试结果是...
by spritez
Mon May 26, 2008 11:31 am
Forum: wxWidgets Development (Chinese)
Topic: 大家好,请问编译后不要mingwm10.dll的方式?
Replies: 10
Views: 4133

应该是-mthread引起了gcc相关选项的重设。 你试试在-mthread之后,加上-static和-static-libgcc试试。 -Utensil 已经加了,还是不行,我用CB编译了一下,就可以不依赖Dll文件了,但,我从CB的选项看了看,也没发现什么特别的地方。我是用makefile编译的,我不知道如何将cb的编译选项生成makefile文件。 今天在网上搜了下,发现mingwm10.dll文件的使用确实和多线程有关,也有人提出人工的解决方案,参看:http://www.nabble.com/Removing-dependency-on-mingwm10.dll-by-manual...
by spritez
Mon May 26, 2008 6:40 am
Forum: wxWidgets Development (Chinese)
Topic: 大家好,请问编译后不要mingwm10.dll的方式?
Replies: 10
Views: 4133

liuqi5521 wrote:静态链接就可以了吧
我一直都使用静态连接方式,在我未使用-mthreads参数编译前,产生的目标文件.exe 是不需要mingwm10.dll就可以运行的,今天,我将程序改为多线程的了,编译时使用了-mthreads参数,产生的.exe文件运行时提示没有找到mingwm10.dll文件。 :cry: :cry: :cry:

有遇到同样问题的吗?谢谢啦!
by spritez
Mon May 26, 2008 5:17 am
Forum: wxWidgets Development (Chinese)
Topic: 大家好,请问编译后不要mingwm10.dll的方式?
Replies: 10
Views: 4133

大家好,请问编译后不要mingwm10.dll的方式?

我在使用单线程编译时,即没有使用-mthreads 时,编译后的可执行文件不需要mingwm10.dll就可单独运行,但是,我做多线程的工程时,加入了-mthreads标志后,编译的结果在运行时要求mingwm10.dll文件存在。

请问,如何能编译出不依赖mingwm10.dll文件就可运行的目标文件?

谢谢。 :?: :?: :?:
by spritez
Mon May 26, 2008 3:10 am
Forum: wxWidgets Development (Chinese)
Topic: 写多线程程序,线程之间共用的变量是不是要
Replies: 4
Views: 3846

volatile 修饰词应该不是专门用于多线程的。他是告诉编译器被修饰的变量的内容有可能随时变化,不能以寄存器方式(如r1,r2,...)访问。

两个线程访问同一变量,要作为互斥变量的形式,考虑使用信号量等多线程的方法访问。当然,如果用普通的访问方法也能访问,因为,编译器是不会报错的,而且程序表面上也有可能没有问题的运行,但关键的问题是如果赶上两个线程同时访问这个变量,就会引发临界问题,可能访问得到的数据并非是最新的,准确地的数据。这时程序产生的问题就依据此变量在程序中的重要性而不同,也许什么也没发生,也许得到错误的计算结果,也许程序跑飞...等等,总之,程序的健康度发生问题。