程序中一些和多线程有关的问题

mfc框架的osg程序中的osg线程是被定义成静态的,用起来很麻烦,因为静态的函数不能直接访问非静态的变量,要通过具体的对象引用。当初不知道为什么,所以想把static给去掉变成非静态的,后面找到了另外一个方法,通过另外一个函数去访问这些非静态变量,然后静态函数访问这个函数,这样就方便了很多。今天才知道为什么osg线程要定义成静态的,原来是有原因的:线程函数在Visual C++/Visual Studio环境下几个特点。线程函数不能以某个类的普通成员函数出现,会有编译错。基于这样一个缘故,线程函数可以写成某个类的静态成员函数或者全局函数,当然如果写成了全局函数,csdn上的一些朋友又要说你违背OO了,所以就用static。

然后就是一个很容易被忽略的问题,gui线程。我们记得多线程使用同一个变量的时候要给这个变量上锁,但我们经常忽略了这个gui线程。所以当GUI线程中要对另一个线程中的变量进行修改时一不小心程序就奔溃了,而且没有具体的错误类型提示,让人一头雾水。所以这时不要忘了在可能发生冲突的区域给这个变量加一个临界区!防止这个线程在使用这个变量时,刚好点击了gui中的菜单啊什么之类的,然后程序就奔溃了,,,,,

你可能感兴趣的:(多线程,C++,线程,Visual)