Есть такой код :
UINT ThreadProc(LPVOID param)
{
AfxGetThread()->m_nThreadID;
int iThread;
iThread=ClientID[CountIDTask];
DWORD dwWaitStatus;
HANDLE dwChangeHandles[99];
dwChangeHandles[1] = HandleEvent[CountIDTask];
dwChangeHandles[0] = FindFirstChangeNotification(
FolderName, // directory to watch
FALSE, // do not watch subtree
FILE_NOTIFY_CHANGE_FILE_NAME); // watch file name changes
......
dwWaitStatus = WaitForMultipleObjects(2, dwChangeHandles, FALSE, INFINITE);
switch (dwWaitStatus)
{
case WAIT_OBJECT_0:
AfxMessageBox("Есть изменение !!!");
if ( FindNextChangeNotification(dwChangeHandles[0]) == FALSE)
ExitProcess(GetLastError());
break;
case WAIT_OBJECT_0+1:
if (iThreadEvent[iThread]==1) // addNotifyFilter
{
ss.Format("%i",iThread);
AfxMessageBox("Событие для потока "+ss);
}
..........
...........
if (iID!=0) // Наш клиент
{
CountIDTask++;
ClientID[CountIDTask]=ClientID[iID];
iThreadEvent[ClientID[CountIDTask]]=1; // cod 1 = addNotyfiFilter
// SetEvent(HandleEvent[ClientID[CountIDTask]]); // задаем событие для потока подключенного клиента
SetEvent(HandleEvent[2]); // задаем событие для потока 2 клиента
}
if (iID==0) // это новый клиент
{
CountIDClient++;
CountIDTask++;
ClientID[CountIDTask]=CountIDClient;
HandleEvent[ClientID[CountIDTask]]=CreateEvent(NULL,FALSE,FALSE,"event"); //создаем событие для потока нового клиента
CWinThread *pThread;
pThread=AfxBeginThread(ThreadProc, this); // запихиваем в поток
}
.............
Коротко суть :
Есть клиенты, которые конектятся к серверу, для каждого клиента должен быть один поток, при условии что количество заданий может быть много. Все это должна отслеживать WaitForMultipleObjects.
Проблема в том, что когда клиентов много и поступает новое задание, то я должен определить какой это клиент, и прервать выполнение потока именно для этого клиента. Потом добавить в масив для WaitForMultipleObjects хандел нового задания, и продолжить выполнение потока.
Если я делаю таким макаром, как указано в коде, то событе для одного потока ловится всеми потоками.
В принципе можно вычислить какой поток из "событийных" мне нужен, но этож не дело.
Как приостоновить по событию конкретный поток, и потом продолжить его работу?