首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

关于多线程的有关问题

2012-03-06 
关于多线程的问题!程序根据不同条件给同一函数A传递不同参数,启动多线程,当在单线程条件下,函数A正常运行,

关于多线程的问题!
程序根据不同条件给同一函数A传递不同参数,启动多线程,当在单线程条件下,函数A正常运行,但是在多线程条件下,只有最后启动的线程工作,而且也不能保证正常运行.前面启动的线程根本不工作,根据createthread和getlasterror返回值,都显示正常.这到底是怎么回事呢?请各位高手给些建议!小弟比较穷,只能给20分了!谢谢!

[解决办法]
我试了,代码没问题啊??

#include "stdafx.h "

UINT WINAPI MonitorDirectory(void *param);

int main(int argc, char* argv[])
{
char sPath[256];
char sPath2[256];
strcpy(sPath, "c:\\ ");
strcpy(sPath2, "d:\\ ");

_beginthreadex(NULL,0,MonitorDirectory,sPath,0,NULL);
_beginthreadex(NULL,0,MonitorDirectory,sPath2,0,NULL);
while (true) {
Sleep(10000);
}
return 0;
}

UINT WINAPI MonitorDirectory(void *param)

{

HANDLE hDir;
char notify[1024], Tmp[256];
DWORD cbBytes,i;
char AnsiChar[3];
wchar_t UnicodeChar[2];
FILE_NOTIFY_INFORMATION *pnotify=(FILE_NOTIFY_INFORMATION *)notify;
FILE_NOTIFY_INFORMATION *tmp;
strcpy(Tmp , (char*)param);
hDir = CreateFile( Tmp ,FILE_LIST_DIRECTORY, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED, NULL);
if (hDir == INVALID_HANDLE_VALUE) { printf( "hDir:INVALID_HANDLE_VALUE ");
return 0;
}
while (TRUE)
{
if(ReadDirectoryChangesW(hDir, notify, sizeof(notify), FALSE, FILE_NOTIFY_CHANGE_FILE_NAME| FILE_NOTIFY_CHANGE_LAST_WRITE, &cbBytes, NULL, NULL))
{
// printf( "ReadDirectoryChangesW Success\n ");
tmp = pnotify;
do
{
switch(tmp-> Action)
{
case FILE_ACTION_ADDED: printf( "\nDirectory/File added - "); break;
case FILE_ACTION_REMOVED: printf( "\nDirectory/File removed - "); break;
case FILE_ACTION_MODIFIED: printf( "\nDirectory/File modified - "); break;
case FILE_ACTION_RENAMED_OLD_NAME: printf( "\nDirectory/File old name - "); break;
case FILE_ACTION_RENAMED_NEW_NAME: printf( "\nDirectory/File new name - "); break;
default: break;
}
//end switch
for(i=0;i <tmp-> FileNameLength/2;i++)
{
UnicodeChar[0]=tmp-> FileName[i];
UnicodeChar[1]=0;
ZeroMemory(AnsiChar,3);
WideCharToMultiByte(CP_ACP,0,UnicodeChar,-1,AnsiChar,3,NULL,NULL);
printf( "%s ",AnsiChar);
}
if(tmp-> NextEntryOffset !=0)
{
i = tmp-> NextEntryOffset;
tmp = (PFILE_NOTIFY_INFORMATION) ((LPBYTE)tmp+i);
} else break; }while(1); }
//end if
else printf( "ReadDirectoryChangesW Error\n ");
}//end while
return 0;
}

热点排行