我在主线程里面使用如下形式,调用 CreateThread 始终得不到正确的结果(检验本地某些端口是否开放)。for i := 0 to 9 do
CreateThread(...)而在加上 WaitForSingleObject 之后却可以了.for i := 0 to 9 do
WaitForSingleObject(CreateThread(...), 1000)请问这是为什么呢?
CreateThread(...)而在加上 WaitForSingleObject 之后却可以了.for i := 0 to 9 do
WaitForSingleObject(CreateThread(...), 1000)请问这是为什么呢?
WaitForSingleObject(CreateThread(...), 1000)
这就没意义了,要等到上一个线程结束后才创建下一个线程。
估计是线程中使用了同一资源导致其他线程获取不到而发生错误。
什么叫得不到正确结果?线程未启动?HANDLE WINAPI CreateThread(
__in LPSECURITY_ATTRIBUTES lpThreadAttributes,
__in SIZE_T dwStackSize,
__in LPTHREAD_START_ROUTINE lpStartAddress,
__in LPVOID lpParameter,
__in DWORD dwCreationFlags, //0的话则挂起,直到调用ResumeThread function
__out LPDWORD lpThreadId
);
还用是不是在之前写了信号量或者互斥对象啥的!?
感谢各位的回答.为了便于观察, 我把 1000 改作 5000, 实际情况是好象就等了 5 秒, 然后 10 个线程就一块儿执行了.而不是每隔 5 秒启动一个线程.(10 个线程检测 10 个端口, 这 10 个端口都是关闭的)程序中原来使用了一些全局变量, 没有同步.现在在线程函数里面使用了临界区, 启动线程还是用下面的
for i := 0 to 9 do
CreateThread(...)
这样检测结果是正确的, 但速度很慢 ...