我有两个名为SENDER和RECEIVER的应用程序.
RECEIVER将由SENDER以System.Diagnostics.Process.Start对象发布
RECEIVER将以隐藏模式启动,因此它没有MainWindowHandle.
然后我们无法使用Win32.WM_COPYDATA顺序发送消息给RECEIVER,因为它需要MainWindowHandle.
我需要的是通过任何方法定期发送和接收消息的能力.
我检查了以下链接的手册,MainWindowHandle但它没有帮助:
一个解决方案可能是一个有用的对象,System.Diagnostics.Process可以帮助我们将消息发送到进程.
在c ++中有没有办法获得"主"程序线程的id?
我看到它std::this_thread::get_id()获取当前正在执行的线程的id但我需要main原始程序线程的id .我没有看到任何功能来获得这个.
原因是我有一些非线程安全的内部函数,只能在应用程序的原始线程上调用,所以为了安全我想做: -
assert(std::this_thread::get_id() == std::main_thread::get_id());
Run Code Online (Sandbox Code Playgroud)
但是当然没有这样做的功能,我看不出任何方法来获取这些信息.
我们可以通过调用函数std::this_thread::get_id()的开头来获取主线程的id,main就像这个答案所暗示的那样.然后我们可以将它存储id在一个全局变量中,并与一个调用进行比较std::this_thread::get_id().
但是,这迫使我们改变main功能.有没有办法创建一个这样做的库函数?我正在考虑使用用std::this_thread::get_id()表达式初始化的全局变量.由于全局变量(具有静态持续时间的变量)相对较早地初始化,因此在初始化这些变量之前,不太可能(但不是不可能,参见:延迟动态初始化)生成线程.
我还可以使用辅助函数初始化全局变量,该函数枚举所有线程并选择具有最早创建时间的线程(基于此答案).
我是多线程的新手,所以非常欢迎任何建议或指导.