![]() |
1
7
无法向指定线程生成处理器时间片的原因是Windows具有 抢占式调度内核 这在很大程度上把调度处理器时间的职责和权限交给了内核,而只交给了内核。 因此,线程在运行时没有任何控制权(如果它们运行的话),更不用说在时间片打开后切换到哪个线程了。 但是,有几种方法可以影响上下文切换:
注意:很少有理由篡改任务优先级,因此请谨慎使用。 |
![]() |
2
2
您可以使用“fibers”而不是“threads”:例如,有一个名为 SwitchToFiber 它允许您指定要调度的光纤。 |
![]() |
3
2
看看Windows7中的ums(用户模式调度)线程 http://msdn.microsoft.com/en-us/library/dd627187(VS.85).aspx |
![]() |
4
2
第二个线程可以通过在其句柄上调用waitForSingleObject()或定期轮询getExitCodeThread()来简单地等待产生的线程。对于改变操作系统的调度机制,其他的答案是正确的——首先最好正确地设计线程。 |
![]() |
5
1
这是不可能的。只有内核可以决定下一步运行什么代码,尽管您可以通过减少非等待线程来影响它,它必须从中选择运行下一个,并通过设置线程优先级 SetThreadPriority . |
![]() |
6
1
您可以使用常规的同步原语(如事件、信号量等)来序列化您的两个线程。这不会以任何形式阻止内核调度 其他 在另一个CPU内核之间或并行的线程,或 几乎同时 在同一个核心。这是由于 preemtive multitasking 现代通用操作系统的本质。 |
![]() |
7
1
如果要在Windows下执行自己的计划,可以使用 fibers ,这本质上是您必须自己安排的线程。然而,考虑到您将自己描述为操作系统内部世界的外行,这可能是一个坏主意,因为光纤是一种高级功能。 |
![]() |
8
0
我可以问 为什么 你想用switchtothread吗? 例如,如果它是某种形式的,因为线程X正在计算您希望在线程Y上等待的某个值,那么我真的建议您查看Visual Studio 2010中的并行模式库或异步代理库,它允许您使用消息块(异步值接收)或通过以下任务执行此操作:wait等待一组任务完成并内联它们的执行…
调用tasks->wait()将等待并内联任何正在运行的任务。 |
|
vini · 安装wfp内核驱动程序后,devcon状态返回39 2 年前 |
![]() |
I101I · 如何镜像HBITMAP 2 年前 |
![]() |
E235 · 如何查看谁创建了Windows NamedPipe 2 年前 |
![]() |
Pizza Ãcke · 创建带有内存映像的Windows托盘图标 2 年前 |
![]() |
Jabu · 如何获取列表框滚动条“拇指”的高度? 2 年前 |
![]() |
tree1234 · 对可执行文件进行代码设计,并允许修改某些字节 2 年前 |
![]() |
Penachia · PDF FontDescriptor标志 6 年前 |