Multithreading Windows CE简单多线程应用程序-线程调度

Multithreading Windows CE简单多线程应用程序-线程调度,multithreading,windows-ce,Multithreading,Windows Ce,我为WindowsCE5.0创建了一个简单的应用程序,作为一些多线程工作的练习。 在WinMain中,我调用两次函数来创建线程: myThread = CreateThread(NULL, 0, myThreadFunc(), NULL, 0, NULL); myThread2 = CreateThread(NULL, 0, myThreadFunc2(), NULL, 0, NULL); 线程中执行的函数如下所示: LPTHREAD_START_ROUTINE myThreadFunc(

我为WindowsCE5.0创建了一个简单的应用程序,作为一些多线程工作的练习。 在WinMain中,我调用两次函数来创建线程:

 myThread = CreateThread(NULL, 0, myThreadFunc(), NULL, 0, NULL);
 myThread2 = CreateThread(NULL, 0, myThreadFunc2(), NULL, 0, NULL);
线程中执行的函数如下所示:

LPTHREAD_START_ROUTINE myThreadFunc()
{
    Sleep(3000);
    MessageBox(NULL, _T("thread 1"), _T("thread 1"), MB_OK);
    return 0;
}

LPTHREAD_START_ROUTINE myThreadFunc2()
{
    Sleep(2000);
    MessageBox(NULL, _T("thread 2"), _T("thread 2"), MB_OK);
    return 0;
}
我希望程序在2秒后从线程2显示对话框,在接下来的1秒后从线程1显示对话框。但实际上,当我运行这个程序时,它首先在2秒后显示来自线程1的对话框,然后在接下来的3秒后显示来自线程2的对话框。看起来这个踏板是按顺序运行的,而不是像我预期的那样同时运行。谁能给我解释一下这种行为吗

我使用Windows CE 5、Windows嵌入式Visual C++和Windows CE标准SDK500


提前感谢您的帮助。

编辑:正确答案在评论中

谢谢你的努力。我刚刚意识到我对函数createThread()的调用不正确。而不是:

myThread = CreateThread(NULL, 0, myThreadFunc(), NULL, 0, NULL);
我必须输入:

myThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&myThreadFunc, NULL, 0, NULL);

这听起来有点不对劲,但请记住,生成其他线程的主线程也在运行。也许可以尝试让两个线程等待主线程设置的启动事件,看看结果是否更可预测。如果将其转储到调试输出或控制台(即不通过GWES窗口系统发送,该系统非常非常喜欢在泵线程上执行所有UI访问),您会看到什么?哎哟,不需要。您永远不必强制转换函数指针来获取CreateThread()以接受它。相反,请修复您的函数声明,它当前是一个不带参数并返回LPTHREAD_START_例程的函数。查看该类型的定义和MSDN,但是如果没有强制转换它就无法编译,那么代码就错了!