主题:线程时间片问题

  共有21182人关注过本帖    
9260
1楼


线程时间片问题  发帖心情 Post By:2009-8-13 14:52:00   [只看该作者]

9260开发板中设置的,线程时间片为100ms。时间太长了。
请问,如何更改此设置?

  单帖管理 | 引用 | 回复 回到顶部
lxs
2楼


  发帖心情 Post By:2009-8-13 17:25:00   [只看该作者]

DWORD CeGetThreadQuantum( HANDLE hThread ); 得到线程的时间片值
BOOL CeSetThreadQuantum( HANDLE hThread, DWORD dwTime ); 设置线程的时间片值
更具体的用法 参考msdn。

  单帖管理 | 引用 | 回复 回到顶部
9260
3楼


  发帖心情 Post By:2009-8-14 10:37:00   [只看该作者]

用的9260板子
1)主线程和用户创建的线程时间片一样吗?
2)要求100ms内完成一次CAN通讯、数据采集、DA驱动
   建立3个辅助线程实现上述功能;
关于线程优先级,及时间片如何设置,可以给些建议吗?

  单帖管理 | 引用 | 回复 回到顶部
9260
4楼


  发帖心情 Post By:2009-8-14 14:10:00   [只看该作者]

修改线程时间片大小,会有什么影响?

  单帖管理 | 引用 | 回复 回到顶部
x10
5楼


  发帖心情 Post By:2009-8-14 14:11:00   [只看该作者]

CE任务调度的分辨率是1ms,在没有任何调度的情况下,一个线程的运行时间片缺省为100ms。做一个100ms发触发事件的线程,其他的功能顺序执行即可。

  单帖管理 | 引用 | 回复 回到顶部
9260
6楼


  发帖心情 Post By:2009-8-14 14:28:00   [只看该作者]

我的理解如下,请指正:
100ms内完成3项任务(CAN通讯线程、数据采集线程、DA驱动线程)
以默认100ms的时间片轮转调度的话,100ms内只会处理一个线程任务,其他任务无法在规定时间内完成。

  单帖管理 | 引用 | 回复 回到顶部
9260
7楼


  发帖心情 Post By:2009-8-15 11:35:00   [只看该作者]

9260板子
创建一串口线程,线程函数返回缓冲区中收到的字符数,时间片更改为20ms,由电脑上的串口助手每隔50ms自动发送一字节数据“00”,为何收到的字符个数却大多为5个,个别有6个?
WaitCommEvent()函数的工作原理可以粗略讲讲吗?谢谢

  单帖管理 | 引用 | 回复 回到顶部
x10
8楼


  发帖心情 Post By:2009-8-15 14:45:00   [只看该作者]

串口驱动程序接收到数据后, 会发送事件通知上层应用程序, WaitCommEvent()函数则是响应RxEvent等事件. 所描述的情况, 我们会在上班后第一时间测试,并与你联系.请确认串口baud rate, 谢谢!

  单帖管理 | 引用 | 回复 回到顶部
9260
9楼


  发帖心情 Post By:2009-8-15 19:12:00   [只看该作者]

串口的波特率使用的是:9600
再问:创建的辅助串口线程时间片设置为20ms;
主线程CeSetThreadQuantum(WINMAIN,20),是否有效?

  单帖管理 | 引用 | 回复 回到顶部
x10
10楼


  发帖心情 Post By:2009-8-15 21:30:00   [只看该作者]

应当是有效的,没有什么限制。

  单帖管理 | 引用 | 回复 回到顶部
x10
11楼


  发帖心情 Post By:2009-8-15 21:32:00   [只看该作者]

BOOL CeSetThreadQuantum(
  HANDLE hThread, 
  DWORD dwTime
); 
应检查返回值以确认设置是否成功。

  单帖管理 | 引用 | 回复 回到顶部
9260
12楼


  发帖心情 Post By:2009-8-15 22:35:00   [只看该作者]

1)利用CEGetThreadQuantum()函数查看串口辅助线程时间片返回值,确为设置的20ms
但CeSetThreadQuantum(WINMAIN,20),
然后CEGetThreadQuantum(WINMAIN)返回值为0,不知为何?
2)请问,上述我所描述的情况“每隔50ms自动发送一个字符00,串口线程函数将缓冲区字符数返回,收到的却多数为2个,个别有3个”,应该是什么原因?谢谢

另:底层的驱动程序,是否收到一帧数据即向上层发送事件?谢谢

  单帖管理 | 引用 | 回复 回到顶部
lxs
13楼


  发帖心情 Post By:2009-8-16 10:33:00   [只看该作者]

你是设置线程的时间片,参数怎么为主函数呀?把参数改为线程的句柄就对了,我是测试过的。

  单帖管理 | 引用 | 回复 回到顶部
zhl
14楼


  发帖心情 Post By:2009-8-16 10:47:00   [只看该作者]

底层的串口驱动程序是每串口中断一次会通知上层程序。串口产生接收中断的条件一般是硬件FIFO接收到8个字节,或者接收数据到不满FIFO同时时间间隔超过4倍的波特率。

  单帖管理 | 引用 | 回复 回到顶部
9260
15楼


  发帖心情 Post By:2009-8-17 10:03:00   [只看该作者]

具体遇到的细节问题我发送到support@emtronix.com这个邮箱了
烦请解惑!期待回复!谢谢

  单帖管理 | 引用 | 回复 回到顶部

返回首页

线程时间片问题

用户名:
            验证码: 验证码,看不清楚?请点击刷新验证码
内容: