有关线程的问题
CWinThread *pWriteW=AfxBeginThread(WriteW,
&m_ctrlW,
THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED);
pWriteW->ResumeThread();
CWinThread *pWriteD=AfxBeginThread(WriteD,
&m_ctrlD,
THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED);
pWriteD->ResumeThread();
为什么要先挂起又唤醒呢?为什么不直接将参数设置为0呢?有什么区别么
[解决办法]
我也不知道,感觉这么怪,何必呢
[解决办法]
单看确实没意义,如果是某种特定环境下的代码片段,这种断章取义更没有意义……
[解决办法]
这个是让你有个机会却做一些初始化的操作,然后才开始线程的工作
[解决办法]
一般在Resumethread之前执行
pWriteW-> m_AutoDelete = FALSE;
的时候才会在创建时将其挂起
这里貌似没有必要这么做,中间没做任何处理
[解决办法]
CreateThread函数创建的新函数带有的相对优先级总是正常优先级。若要使线程以
空闲优先级来运行,应该将CREATE_SUSPENDED标志传递给CreateThread函数,这可以防止
线程执行任何代码。然后可以调用SetThreadPriority,将线程的优先级改为相对空闲优先级。
这时可以调用ResumeThread,使得线程成为可调度的线程。你不知道线程何时能够获得CPU时
间,但是调度程序会考虑这样一个情况,即该线程拥有一个空闲优先级。最后,可以关闭新线
程的句柄,一旦线程终止运行,内核对象就能被撤消。
若要创建一个带有相对优先级为空闲的线程,可以执行类似下面的代码,与楼主遇到的情况类似:
DWORD dwThreadID;HANDLE hThread = CreateThread(NULL,0,ThreadFunc,NULL,CREATE_SUSPENDED,&dwThreadID);SetThreadPriority(hThread,THREAD_PRIORITY_IDLE);ResumeThread(hThread);CloseHandle(hThread);