现在贴上主要代码;#pragma data_seg(".shared")
HHOOK g_hook=NULL;
HWND g_hwnd=NULL;
Log loguser;
CRITICAL_SECTION section;
int b=0;
#pragma data_seg()
#pragma comment(linker,"/section:.shared,rws")
struct rizhi
{
char logchar[100];
};class Log
{
public:
Log();
~Log();
private:
Sunday findstring;
ifstream inputfile;
ofstream outputfile;
list<rizhi> setofchar;//STL里面的链表类型
public:
void AddData(char* str);
void DelData(char* str);
bool load();
bool find(char* str);
bool find(char* str,int);
void DealHead(char*);
void DealTail();
void Show(list<rizhi>&);
void clear();
};
我的DLL是做成钩子的,可能钩了不同的线程;
loguser的内容经常需要修改;但是由于进程间互不影响,以至于修改的效果不能在其他的线程中表现出来;
希望大家给出解决方法;我洗耳恭听;
HHOOK g_hook=NULL;
HWND g_hwnd=NULL;
Log loguser;
CRITICAL_SECTION section;
int b=0;
#pragma data_seg()
#pragma comment(linker,"/section:.shared,rws")
struct rizhi
{
char logchar[100];
};class Log
{
public:
Log();
~Log();
private:
Sunday findstring;
ifstream inputfile;
ofstream outputfile;
list<rizhi> setofchar;//STL里面的链表类型
public:
void AddData(char* str);
void DelData(char* str);
bool load();
bool find(char* str);
bool find(char* str,int);
void DealHead(char*);
void DealTail();
void Show(list<rizhi>&);
void clear();
};
我的DLL是做成钩子的,可能钩了不同的线程;
loguser的内容经常需要修改;但是由于进程间互不影响,以至于修改的效果不能在其他的线程中表现出来;
希望大家给出解决方法;我洗耳恭听;
共享指针或者类实例是危险且不可靠的。
所以你的例子中 HHOOK/HWND 可以放在共享段,但 Log/CRITICAL_SECTION 不能放在共享段。
你可以在共享区中定义一个数组,或者使用文件映射的方式共享数据,在进程间可以传递数组下标或相对偏移量,不能直接传递指针。
跨进程的线程互斥可以使用命名mutex。
这么说我可以用vector<rizhi>这种类型了;
但是如果类涉及内存分配的动作,那么就会使该动作不能在其他进程空间里生效。而且,共享节里不能存放进程绑定类型的,比如CRITICAL_SECTION,
要控制进程间的同步必须使用,内核对象这样才能生效。想在进程间共享复杂一些的数据不要用共享节,用共享内存、管道、套接字之类的都可以。
在其他进程会不会出现变化;如果不行的话;我只能考虑管道之类的了;
可以,但是改变的内容只能是一级的。比如说int **p[10],里面保存了十个二级指针,你在其他进程可以正确读出十个二级指针的值,但是它们指向的内容可能只有一个进程能正确读取出来。