关于线程动画

nyb 2012-08-02 12:54:04
由于动画比较多 所以用的线程 通过PostMessage发送消息通知主线程操作。
比如:
struct tagTimer
{
DWORD dwTimerID;
DWORD dwRepeatTimes; // 重复次数
DWORD dwStartTime; // 开始时间 GetTickCount
DWORD dwNowTime; // 现在的时间
WPARAM wBindParam;
};
bool SetTimer(DWORD dwTimerID, DWORD dwElapse, DWORD dwRepeatTimes, WPARAM wParam);
SetTimer会生成一个tagTimer然后存储
当前线程运行的时候满足条件后PostMessage
我现在的做法是m_pSinkWnd->PostMessage(IDM_TIMER, (WPARAM)pTimerItem->dwTimerID, (LPARAM)pTimerItem);这样做的话(LPARAM)pTimerItem可能会有同步问题,dwRepeatTimes,dwNowTime这些可能都不同步,而且我不想重新new一个tagTimer然后在收到消息后delete,因为new delete太频繁了,所以想请教一下有没简单的方法来解决这方面的问题,尽量简单一点。
...全文
137 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
nyb 2012-08-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

应该做一个控件,而不是发消息,占用主界面的消息队列
[/Quote]
做一个控件也是有可能会出现不同步的吧,不过这个是解决办法应该可以 ,我的线程最少25毫秒才执行一次,不可能25毫秒还不从消息队列取出来吧。
nyb 2012-08-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

你这post的不是指针么?显然数据会是同步的。

至于数据同步会不会有问题,要看你那个播动画的线程是怎么处理的。
[/Quote]
m_pSinkWnd->PostMessage(IDM_TIMER, (WPARAM)pTimerItem->dwTimerID, (LPARAM)pTimerItem);假设线程25毫秒运行一次 那么有可能PostMessage2次,PostMessage的时候会修改pTimerItem 另外一边才从队列里取出来 所以pTimerItem里的值肯定是不同步了
ouyh12345 2012-08-02
  • 打赏
  • 举报
回复
应该做一个控件,而不是发消息,占用主界面的消息队列
zhanshen2891 2012-08-02
  • 打赏
  • 举报
回复
你这post的不是指针么?显然数据会是同步的。

至于数据同步会不会有问题,要看你那个播动画的线程是怎么处理的。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧