主线程和子线程的时间片问题

shouldface 2012-06-27 11:05:04
主线程创建一个子线程,默认优先级,即,主线程和子线程优先级一样,创建的子线程为立即执行的,子线程是不是也要等到主线程的第一个时间片用完挂起时才能被执行吗?
如果主线程时间片用完但程序未完 ,就执行子线程,当子线程执行完后返回到主线程的哪个点?
...全文
298 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
shouldface 2012-06-27
  • 打赏
  • 举报
回复
我在vs2008里试了,确实没问题,谢谢大家
shouldface 2012-06-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
引用 4 楼 的回复:
hThread1 = CreateThread(NULL,0,fun1Proc,NULL,0,NULL)……
[/Quote]
那现在工作都用什么编译器?
善良超锅锅 2012-06-27
  • 打赏
  • 举报
回复
我在vs2010中把#include <iostream.h>改成了#include <iostream>
并加了一行using namespace std;
没有问题,可能问题真如ls说的。
学C++用dev c++或者 vs2010比较好
善良超锅锅 2012-06-27
  • 打赏
  • 举报
回复
我这边没有看到两个main thread is runing 只看到一个
[Quote=引用 4 楼 的回复:]
#include <windows.h>
#include <iostream.h>

DWORD WINAPI fun1Proc(
LPVOID lpParameter
);

void main()
{

HANDLE hThread1;

hThread1 = CreateThread(NULL,0,fun1Proc,NULL,0,NULL);

CloseHan……
[/Quote]
jackyjkchen 2012-06-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
#include <windows.h>
#include <iostream.h>

DWORD WINAPI fun1Proc(
LPVOID lpParameter
);

void main()
{

HANDLE hThread1;

hThread1 = CreateThread(NULL,0,fun1Proc,NULL,0,NULL);

CloseHan……
[/Quote]

iostream.h这种非标准头文件,一看就是VC6,VC6的iostream线程不安全,输出任何东西都不奇怪

珍惜生命,远离VC6
shouldface 2012-06-27
  • 打赏
  • 举报
回复
Main thread is runing
Main thread is runing
Thread1 is runing
A
F
B
G
C
H
D
I
E
J
Press any Key to continue
shouldface 2012-06-27
  • 打赏
  • 举报
回复
#include <windows.h>
#include <iostream.h>

DWORD WINAPI fun1Proc(
LPVOID lpParameter
);

void main()
{

HANDLE hThread1;

hThread1 = CreateThread(NULL,0,fun1Proc,NULL,0,NULL);

CloseHandle(hThread1);

cout << "Main thread is runing" << endl;

cout << "A" << endl;
cout << "B" << endl;
cout << "C" << endl;
cout << "D" << endl;
cout << "E" << endl;

}

DWORD WINAPI fun1Proc(
LPVOID lpParameter
)
{
cout << "Thread1 is runing" << endl;

cout << "F" << endl;
cout << "G" << endl;
cout << "H" << endl;
cout << "I" << endl;
cout << "J" << endl;

return 0;
}

那结果为什么有两个main thread is runing ?

善良超锅锅 2012-06-27
  • 打赏
  • 举报
回复
线程并不知道自己被挂起过的。
morebread 2012-06-27
  • 打赏
  • 举报
回复
1 单核的话是的,但不一定是主线程的,有可能是其他程序线程挂起
2 时间片结束后cpu执行中断,将当前现场的信息保存下来,返回的时候再恢复现场。具体可以了解下cpu中断的相关文档
善良超锅锅 2012-06-27
  • 打赏
  • 举报
回复
子线程是不是也要等到主线程的第一个时间片用完挂起时才能被执行吗?

对于只有一个cpu 单核,不支持多线程的电脑来说是这样的。因为每一时刻只能有一个线程在cpu上运行。这和他们的父子线程关系没关系。

主线程挂起之前执行到哪里就返回到哪里。每个线程在挂起前系统都会记录这个这个挂起时一瞬间的状态,线程获得时间片重新运行时会接着运行 就好像没有被挂起过一样。

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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