1.有个全局存在的内存对象,主线程向里面写入数据,子线程处理其中的数据并删除;这块内存的数据被两个线程公用,请问应该注意些什么问题?
2.是不是子线程因为没有窗口对象或者说它自身不是窗口对象,它没有维护消息队列,所以对线程发送消息如sendmessage(mythread.handle,wm_mymessage,0,integer(@mydata)),mythread这个线程是接收不到这个消息的,怎么样能让它接收到这个消息呢;
也就是怎么向子线程发送消息?
2.是不是子线程因为没有窗口对象或者说它自身不是窗口对象,它没有维护消息队列,所以对线程发送消息如sendmessage(mythread.handle,wm_mymessage,0,integer(@mydata)),mythread这个线程是接收不到这个消息的,怎么样能让它接收到这个消息呢;
也就是怎么向子线程发送消息?
解决方案 »
- 请高手们进来帮帮忙!!(不要碰到问题就躲着俺!)
- 100分求解答:怎么在局域网里自动软件升级,就像internet上的金山毒霸升级一样.
- 座标问题!!!!!
- 请问 如何在delphi中修改toolbutton上的图片和字体?
- 各位老兄帮一把吧:在主窗体中新建一个From,如何使它在任务上显示,像主窗体一样?
- 为什么memo.lines.savetofile会覆盖掉原来的文件内容?,另外。。。
- HELP!!!前端通过SQL语句插入记录的日期型字段问题?
- 控制光驱的命令
- 怎么实现增量查询
- 如何发布用ADO技术实现的应用?
- 在delphi 中实现对sql server的数据备份
- delphi中分子式怎么表示
>>内存的数据被两个线程公用,请问应该注意些什么问题?
用互斥量就可解決!
當一個線程要操作 該變量時, 先設置互斥量,
再操作, 操作完, 再釋放, 另外一個, 操作前, 先檢查互斥量, 再操作!!
這樣就比較安全!!!>>2.是不是子线程因为没有窗口对象或者说它自身不是窗口对象
用這個吧
BOOL PostThreadMessage( DWORD idThread,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
利用事件(CEvent)辅助控制同步
2。PostThreadMessage?可用事件替换,自己循环WaitForMultiObject事件,效果一样的。
CMutex可以进程互斥,但效率比CCriticalSection慢
BOOL PostThreadMessage( DWORD idThread,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
但是子线程的消息处理函数还是没有触发
>>子线程的消息处理函数还是没有触发
你還必須用 PeekMessage來取!但實際中, 如果你通知的數息類型比較小, 可用
Event配合 WaitForMultipleObjects 來實現更好, 更簡單!
from win95程序设计大奥妙
38h DWORD MessageQueue
此欄位的低字組(low WORD)放置㆒個Win16 global heap handle,用作執行緒的訊息
佇列。訊息佇列是存放系統轉來的視窗訊息的場所,將在第4章介紹。這個欄位和
W16TDB 的1Ch 欄位有密切關係。