- 主题:PostMessage() 线程安全吗?
能不能从子线程调用 PostMessage(hwnd, ...) 唤醒主线程?
--
FROM 183.253.138.*
win32api 的设计还是很牛X的啊。在 linux 下消息循环需要借助 pipe 或者 eventfd 才能中断 epoll()/kqueue() 函数。
在 Windows 下有 PostMessage() 一下就搞定了。不过美中不足的是,Windows 得创建窗口,获得 hwnd 才能搞事。
【 在 javaboy (喝了咖啡就话多-_-;) 的大作中提到: 】
: 能的。绝对安全。
--
FROM 183.253.138.*
我消息循环放在子线程里面。能唤醒?
只想写个简单的消息循环,使用 WSAAsyncSelect()/SetTimer() 实现异步 IO,我肯定不会去碰 COM 那种巨坑。
按说得用 IOCP,但太麻烦了,windows 平台凑合着能用就好。
【 在 xiaoju (可爱的龙猫) 的大作中提到: 】
: 主线程有消息循环才能唤醒,消息本身安全,但消息的参数需要自己处理
: 如果主线程有消息循环,写个简单COM接口marshal一下从任何线程里直接调用就行了,消息,参数拷贝,线程同步等脏活MS都已经包好了
--
FROM 183.253.138.*
没有界面纯终端的 IO 程序,偶尔用一两个 win32api 不需要去碰 COM.
话说 select() 也太弱了,windows 怎么也得提供一个 poll() 吧。反正大家也不会在 windows 上跑重 IO 应用。iocp 好是好,用起来不太方便。
【 在 xiaoju (可爱的龙猫) 的大作中提到: 】
: 既然碰了win32api,用COM就是正解,要不就应该完全上跨平台的库
: 收发消息看似简单其实坑非常多。反而是COM只要你线程入口正确调用CoInitialize,跨线程marshal,就不会有任何问题
--
FROM 183.253.138.*
因为我就在包方便的跨平台库啊。
【 在 xiaoju (可爱的龙猫) 的大作中提到: 】
: 为什么一定要用api呢?不是早有人包出了各种方便的跨平台库?
--
FROM 183.253.138.*
不错不错好东东。我了解一下。
【 在 leadu (leadu) 的大作中提到: 】
: iocp都是二十多年前的技术了
: 喜欢poll就直接用registered IO, 这个也是10年前的技术了,intel的dpdk抄的这个。直接poll性能更好
--
FROM 183.253.138.*