1、Core,
在Core程序中有一些全局的变量,准备开发Core_set和Core_get来得到这个变量的值;
Core一直在运行,不退出。
2、App应用程序
在App段可以调用Core_set和Core_get来设置和取得变量值;
现在遇到的问题是:Core_set调用的时候,需要在Core段来执行一段代码来触发对应的事件。
方案:
1、使用进程间通讯
用createfilemapping来共享这些全局变量,但在Core端不能够实时得到变量
2、用DCOM来做
测试了下,比较复杂,调试快吐血了,
3、在Core端建立一个SocketServer来做,
在App端频繁的调用,会不会出现性能问题?
大家有没有比较好的思路,讨论下
非常感谢!
10 个解决方案
#1
使用共享变量是一个方法
或使用进程间消息机制,App发消息给Core来改变变量的值
或使用进程间消息机制,App发消息给Core来改变变量的值
#2
也可以考虑使用消息队列,
我们项目中多数都是用的这个。
我们项目中多数都是用的这个。
#3
非常感谢楼上的2位:
现在考虑这个方案可以么:
1、在Core做成service,开辟一个足够的带name的内存映射对象,createfilemapping,
2、在app端可以可以打开内存映射对象,可以得到对应内存区域的值,如果要设置值的话,通过DeviceIoControl来操作对应的变量
不知道是否可行?
现在考虑这个方案可以么:
1、在Core做成service,开辟一个足够的带name的内存映射对象,createfilemapping,
2、在app端可以可以打开内存映射对象,可以得到对应内存区域的值,如果要设置值的话,通过DeviceIoControl来操作对应的变量
不知道是否可行?
#4
#5
1.进程A调用CreateFileMapping创建一个内存映射文件。
2.进程A调用MapViewOfFile获取到映射到文件的内存起始地址,调用memcpy往内存中拷贝数据。
3.进程B调用CreateFileMapping打开进程A创建的内存映射文件。
4.进程B调用MapViewOfFile获取到映射到文件的内存起始地址,调用memcpy从内存中读出数据。
5.通信完后进程A,B分别调用UnmapViewOfFile,CloseHandle取消内存映射和关闭内存映射对象句柄。
2.进程A调用MapViewOfFile获取到映射到文件的内存起始地址,调用memcpy往内存中拷贝数据。
3.进程B调用CreateFileMapping打开进程A创建的内存映射文件。
4.进程B调用MapViewOfFile获取到映射到文件的内存起始地址,调用memcpy从内存中读出数据。
5.通信完后进程A,B分别调用UnmapViewOfFile,CloseHandle取消内存映射和关闭内存映射对象句柄。
#6
你可以使用MessageQueue来共享数据。
#7
谢谢楼上的兄弟们,这2天测试下这些方式行不行?
dcom方式基本排除了,tmd,真调试得吐血了,一直找不到方法,不知道什么原因,
dcom方式基本排除了,tmd,真调试得吐血了,一直找不到方法,不知道什么原因,
#8
写了个测试的services,发现把dll和reg都写到nk.bin中,服务是可以起来的,但把该services的dll不打包在nk.bin中,copy到nandflash中,不能够启动。
如何用services.exe或者对应编程的方式来加载services?
用编程的方式调用RegisterService;
windows ce 6.0的msdn中提到
The RegisterService function has been removed.
也不知道RegisterService 现在用什么来代替了?
晕了
如何用services.exe或者对应编程的方式来加载services?
用编程的方式调用RegisterService;
windows ce 6.0的msdn中提到
The RegisterService function has been removed.
也不知道RegisterService 现在用什么来代替了?
晕了
#9
自己顶下,现在RegisterService 已经不支持了,也不知道用什么来加载,最好能够直接程序中控制
#10
我做的进程通讯是用消息来实现的,比较简单。
有两种方式,一种是采用WM_COPYDATA消息,这个是专门用来进行进程通讯的,可以发一个整块内存的指针过去,用SendMessage或者SendMessageTimeout的方式;
另一种是自己定义一个私有消息,比如两边都定义m_Msg = RegisterWindowMessage("SPCIAL MESSAGE");
然后以m_Msg为消息发送,不过这种只能发送包含wParam和lParam两个相当于是int型大小的信息过去。
具体怎么用就看自己灵活了
有两种方式,一种是采用WM_COPYDATA消息,这个是专门用来进行进程通讯的,可以发一个整块内存的指针过去,用SendMessage或者SendMessageTimeout的方式;
另一种是自己定义一个私有消息,比如两边都定义m_Msg = RegisterWindowMessage("SPCIAL MESSAGE");
然后以m_Msg为消息发送,不过这种只能发送包含wParam和lParam两个相当于是int型大小的信息过去。
具体怎么用就看自己灵活了
#1
使用共享变量是一个方法
或使用进程间消息机制,App发消息给Core来改变变量的值
或使用进程间消息机制,App发消息给Core来改变变量的值
#2
也可以考虑使用消息队列,
我们项目中多数都是用的这个。
我们项目中多数都是用的这个。
#3
非常感谢楼上的2位:
现在考虑这个方案可以么:
1、在Core做成service,开辟一个足够的带name的内存映射对象,createfilemapping,
2、在app端可以可以打开内存映射对象,可以得到对应内存区域的值,如果要设置值的话,通过DeviceIoControl来操作对应的变量
不知道是否可行?
现在考虑这个方案可以么:
1、在Core做成service,开辟一个足够的带name的内存映射对象,createfilemapping,
2、在app端可以可以打开内存映射对象,可以得到对应内存区域的值,如果要设置值的话,通过DeviceIoControl来操作对应的变量
不知道是否可行?
#4
#5
1.进程A调用CreateFileMapping创建一个内存映射文件。
2.进程A调用MapViewOfFile获取到映射到文件的内存起始地址,调用memcpy往内存中拷贝数据。
3.进程B调用CreateFileMapping打开进程A创建的内存映射文件。
4.进程B调用MapViewOfFile获取到映射到文件的内存起始地址,调用memcpy从内存中读出数据。
5.通信完后进程A,B分别调用UnmapViewOfFile,CloseHandle取消内存映射和关闭内存映射对象句柄。
2.进程A调用MapViewOfFile获取到映射到文件的内存起始地址,调用memcpy往内存中拷贝数据。
3.进程B调用CreateFileMapping打开进程A创建的内存映射文件。
4.进程B调用MapViewOfFile获取到映射到文件的内存起始地址,调用memcpy从内存中读出数据。
5.通信完后进程A,B分别调用UnmapViewOfFile,CloseHandle取消内存映射和关闭内存映射对象句柄。
#6
你可以使用MessageQueue来共享数据。
#7
谢谢楼上的兄弟们,这2天测试下这些方式行不行?
dcom方式基本排除了,tmd,真调试得吐血了,一直找不到方法,不知道什么原因,
dcom方式基本排除了,tmd,真调试得吐血了,一直找不到方法,不知道什么原因,
#8
写了个测试的services,发现把dll和reg都写到nk.bin中,服务是可以起来的,但把该services的dll不打包在nk.bin中,copy到nandflash中,不能够启动。
如何用services.exe或者对应编程的方式来加载services?
用编程的方式调用RegisterService;
windows ce 6.0的msdn中提到
The RegisterService function has been removed.
也不知道RegisterService 现在用什么来代替了?
晕了
如何用services.exe或者对应编程的方式来加载services?
用编程的方式调用RegisterService;
windows ce 6.0的msdn中提到
The RegisterService function has been removed.
也不知道RegisterService 现在用什么来代替了?
晕了
#9
自己顶下,现在RegisterService 已经不支持了,也不知道用什么来加载,最好能够直接程序中控制
#10
我做的进程通讯是用消息来实现的,比较简单。
有两种方式,一种是采用WM_COPYDATA消息,这个是专门用来进行进程通讯的,可以发一个整块内存的指针过去,用SendMessage或者SendMessageTimeout的方式;
另一种是自己定义一个私有消息,比如两边都定义m_Msg = RegisterWindowMessage("SPCIAL MESSAGE");
然后以m_Msg为消息发送,不过这种只能发送包含wParam和lParam两个相当于是int型大小的信息过去。
具体怎么用就看自己灵活了
有两种方式,一种是采用WM_COPYDATA消息,这个是专门用来进行进程通讯的,可以发一个整块内存的指针过去,用SendMessage或者SendMessageTimeout的方式;
另一种是自己定义一个私有消息,比如两边都定义m_Msg = RegisterWindowMessage("SPCIAL MESSAGE");
然后以m_Msg为消息发送,不过这种只能发送包含wParam和lParam两个相当于是int型大小的信息过去。
具体怎么用就看自己灵活了