Für das Betriebssystem VxWorks, sie bieten eine Systembibliothek für Laich Aufgaben:Warum nimmt TaskSpawn statt void *?
int taskSpawn
(
char * name, /* name of new task (stored at pStackBase) */
int priority, /* priority of new task */
int options, /* task option word */
int stackSize, /* size (bytes) of stack needed plus name */
FUNCPTR entryPt, /* entry point of new task */
int arg1, /* 1st of 10 req'd task args to pass to func */
int arg2,
int arg3,
int arg4,
int arg5,
int arg6,
int arg7,
int arg8,
int arg9,
int arg10
)
Sie sehen können, wie begrenzt ist dies etwas, im Vergleich zu wie std :: thread.
Normalerweise könnte ich die passenden Argumente basierend auf der Eingabe-Funktion übergeben.
Da dies eine C-Funktion ist, war ich neugierig, ob es einen Grund dafür war, dass vxWorks wählen Argumente haben 1-10 ints anstelle von void-Zeiger sein.
Wenn sie ungültige Zeiger wären, wäre ich in der Lage, jeden Typ weiterzuleiten und dann in die Eingabefunktion zurück zu werfen.
Wenn ich einen Zeiger von struct foo
in die Eingabefunktion geben wollte, die taskSpawn gegeben wurde, konnte es in eine Ganzzahl konvertiert werden und dann zurück zum entsprechenden Zeiger?
Basierend auf dem Design dieser Funktion bin ich gezwungen, Globals zu verwenden?
Hmm, das klingt nach ziemlich schmutzigem Code. Sich auf Implementierungsdetails ohne Notwendigkeit zu verlassen, ist ein schlechter Stil. ** Iff ** Man muss einen Zeiger als Integer übergeben (es gibt gute Gründe in einigen generischen Funktionen), "intptr_t" und seine sibbling "uintptr_t" sollten verwendet werden. Das hält nicht nur einen Zeiger fest, sondern gibt auch eindeutig an, dass "dieses Objekt einen Zeiger halten könnte". – Olaf
@Olaf: Das ist hier nicht relevant, da die Person, die diese Frage stellt, eine Hersteller-API verwendet, die nicht geändert werden kann. –
Nehmen Sie einfach meinen Kommentar als - gut - Kommentar. Es ist relevant, die Qualität des Codes zu beurteilen und wie gut er vom Anbieter gepflegt wird. (Ich kenne VxWorks). Ich habe nicht gesagt, dass der Code kaputt ist, obwohl ich mir sehr wohl bewusst bin, dass der Code auf dieser Plattform funktioniert. Aber es gibt eine Menge solchen Code, der problematischer ist und auch von anderen gelesen werden kann. – Olaf