Der er en god grund til at lave UI i en anden tråd end main, hvis du vil have en højere prioritet for en tråd end for main, da man ikke kan lave det sådan omdefinere du lige trådene så den høje prio bliver main, eller en tråd under main med main der kun venter på at alt afsluttes, og UI bliver så en tråd med lavere prio, men hvorfor der er specielle UI tråd fatter jeg ikke rigtigt.
Grunden til at have UI threads er at disse kan oprette MFC CWnd's og afledte windows/views, der kan blive oprettet og kommunikere som window's/view's i main/app thread.
On a single CPU Windows machine, all threads are kept track of and given a slice of processor time (usually a few milliseconds). Windows will cycle through the list it keeps, pausing and resuming each thread. Once a thread has used up its time on the processor, Windows will pause the thread, record its CPU registers (along with some other data), and, after restoring all its data, activate the next thread. Each thread has two priorities: base and dynamic. The base priority can be changed, however, it cannot be changed to have a priority higher than that of the parent thread. Dynamic priority is the same as the base priority, however, it can be raised or lowered by Windows. Windows chooses which thread to run next based on the thread's dynamic priority. Naturally, threads with a higher dynamic priority run first.
Jeg er ved at prøve på at lave en chat lidt ligende ICQ, så jeg skal hente tekst ud fra socket og skrive det ud i en edit og det kan jeg ikke få en worker thread til, men jeg fatter nada af UI Threads så jeg er lidt lost.
Jo noget ligende det men jeg kan intet inde fra de worker threads jeg fik lavet mig, men det hvis jeg kan bruge worker threads til det så vil jeg da hellere det da de virker som om de er en del nemmere at bruge.
Du kan sende en message fra din thread med PostThreadMessage, hvis du blot skal sende til din main thread kan du gøre det med: AfxGetApp()->PostThreadMessage(msg_id, wp, lp); msg_id er en id som du får fra RegisterWindowMessage, f.ex: UINT msg_id = RegisterWindowMessage("WhatEverMsg"); wp og lp kan f.ex være en int eller en pointer til en class. I App'en kan du fange beskeden med ON_REGISTERED_MESSAGE, eller bedre ved at instalere en message hook med SetWindowsHookEx, den hook du skal lave er af typen WH_GETMESSAGE.
>segmose Jeg kan ikke se noget problem i at give main thread prioriteten THREAD_PRIORITY_LOWEST, og lave en slave thread fra main og give denne prioriteten THREAD_PRIORITY_HIGHES, vil slave thread'en så ikke have prioritet over main thread'en?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.